| | |
| | | public class EquipmentAlarmInforService : ServiceBase<Dt_EquipmentAlarmInfor, IRepository<Dt_EquipmentAlarmInfor>>, IEquipmentAlarmInforService |
| | | { |
| | | private readonly IMessageInfoService _messageInfoService; |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | |
| | | public EquipmentAlarmInforService(IRepository<Dt_EquipmentAlarmInfor> BaseDal, IMessageInfoService messageInfoService) : base(BaseDal) |
| | | public EquipmentAlarmInforService(IRepository<Dt_EquipmentAlarmInfor> BaseDal, IMessageInfoService messageInfoService, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal) |
| | | { |
| | | _messageInfoService = messageInfoService; |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | } |
| | | |
| | | public WebResponseContent getDeviceStatus() |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | var url = "http://172.16.1.2:8080/cube/taskInfo/getDeviceStatus?token=wH5zdAUCv2BEHJIinmowyki8cdc5ge8fAwFDcYZs0bVldNgmORt0O0l4GJTDv1dglRdMxb9xDK5Qb3NJAqL1Li2GkfdVa3KnIkfrQZtsP7UXhMmUz6xEuztG6d5svAJO9HENLb8JWVqCfpO2EWV6ebo/g5tJ9x7kbwwAxvCBrWdiEJv09FvaRQ== "; |
| | | var result = HttpHelper.Get(url); |
| | | var response = JsonConvert.DeserializeObject<AGVResponse<DeviceStatusData>>(result); |
| | | if (response == null || response.code != "0" || response.data == null) return content.Error($"è·å设å¤ä¿¡æ¯å¤±è´¥: {response?.msg}"); |
| | | List<string> codes = new List<string>(); |
| | | if (response.data.robot.Count < 1 || response.data.sorters.Count < 0) return content.Error($"è·å设å¤ä¿¡æ¯ä¸ºç©º: {response?.msg}"); |
| | | |
| | | // å¤çæºå¨äººè®¾å¤æ°æ® |
| | | codes.AddRange(response.data.robot.Select(x => x.robotCode).ToList()); |
| | | |
| | | // å¤ç忣å°è®¾å¤æ°æ® |
| | | codes.AddRange(response.data.sorters.Select(x => x.sorterCode).ToList()); |
| | | |
| | | if (codes.Count < 1) return content; |
| | | List<Dt_EquipmentAlarmInfor> equipmentAlarmInfors = BaseDal.QueryData(x => codes.Contains(x.RobotCode)); |
| | | List<Dt_EquipmentAlarmInfor> equipmentAlarmInforsAdd = new List<Dt_EquipmentAlarmInfor>(); |
| | | List<Dt_EquipmentAlarmInfor> equipmentAlarmInforsUp = new List<Dt_EquipmentAlarmInfor>(); |
| | | foreach (var item in response.data.robot) |
| | | { |
| | | Dt_EquipmentAlarmInfor? equipmentAlarmInfor = equipmentAlarmInfors.Where(x => x.RobotCode == item.robotCode).FirstOrDefault(); |
| | | if (equipmentAlarmInfor == null) |
| | | { |
| | | equipmentAlarmInfor = new Dt_EquipmentAlarmInfor() |
| | | { |
| | | RobotCode = item.robotCode, |
| | | RobotName = item.robotName, |
| | | Status = item.status, |
| | | SyncTime = DateTime.Now, |
| | | CreateDate = DateTime.Now, |
| | | }; |
| | | equipmentAlarmInforsAdd.Add(equipmentAlarmInfor); |
| | | } |
| | | else |
| | | { |
| | | equipmentAlarmInfor.RobotName = item.robotName; |
| | | equipmentAlarmInfor.Status = item.status; |
| | | equipmentAlarmInfor.SyncTime = DateTime.Now; |
| | | equipmentAlarmInforsUp.Add(equipmentAlarmInfor); |
| | | } |
| | | if (string.Equals(item.status, nameof(DeviceStatus.Error), StringComparison.OrdinalIgnoreCase)) |
| | | { |
| | | _messageInfoService.AddMessageInfo(MessageGroupByEnum.EquipmentAlarm, item.robotName, item.status); |
| | | } |
| | | } |
| | | foreach (var item in response.data.sorters) |
| | | { |
| | | Dt_EquipmentAlarmInfor? equipmentAlarmInfor = equipmentAlarmInfors.Where(x => x.RobotCode == item.sorterCode).FirstOrDefault(); |
| | | if (equipmentAlarmInfor == null) |
| | | { |
| | | equipmentAlarmInfor = new Dt_EquipmentAlarmInfor() |
| | | { |
| | | RobotCode = item.sorterCode, |
| | | RobotName = item.sorterName, |
| | | Status = item.status, |
| | | SyncTime = DateTime.Now, |
| | | CreateDate = DateTime.Now, |
| | | }; |
| | | equipmentAlarmInforsAdd.Add(equipmentAlarmInfor); |
| | | } |
| | | else |
| | | { |
| | | equipmentAlarmInfor.RobotName = item.sorterCode; |
| | | equipmentAlarmInfor.Status = item.status; |
| | | equipmentAlarmInfor.SyncTime = DateTime.Now; |
| | | equipmentAlarmInforsUp.Add(equipmentAlarmInfor); |
| | | } |
| | | if (string.Equals(item.status, nameof(DeviceStatus.Error), StringComparison.OrdinalIgnoreCase)) |
| | | { |
| | | _messageInfoService.AddMessageInfo(MessageGroupByEnum.EquipmentAlarm, item.sorterCode, item.status); |
| | | } |
| | | } |
| | | if (equipmentAlarmInforsAdd.Count > 0) BaseDal.AddData(equipmentAlarmInforsAdd); |
| | | if (equipmentAlarmInforsUp.Count > 0) BaseDal.UpdateData(equipmentAlarmInforsUp); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ¥çç«åºå°è½¦æ¥è¦ä¿¡æ¯ |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public WebResponseContent getDeviceStatus() |
| | | public WebResponseContent getDeviceStatus1() |
| | | { |
| | | try |
| | | { |
| | | var url = "http://172.16.1.2:8080/cube/taskInfo/getDeviceStatus?token=wH5zdAUCv2BEHJIinmowyki8cdc5ge8fAwFDcYZs0bVldNgmORt0O0l4GJTDv1dglRdMxb9xDK5Qb3NJAqL1Li2GkfdVa3KnIkfrQZtsP7UXhMmUz6xEuztG6d5svAJO9HENLb8JWVqCfpO2EWV6ebo/g5tJ9x7kbwwAxvCBrWdiEJv09FvaRQ== "; |
| | | var result = HttpHelper.Get(url); |
| | | |
| | | var response = JsonConvert.DeserializeObject<AGVResponse<DeviceStatusData>>(result); |
| | | |
| | | |
| | | |
| | | // æ£æ¥æ¥å£ååºæ¯å¦æå |
| | | if (response == null || response.code != "0") |
| | |
| | | } |
| | | |
| | | var syncTime = DateTime.Now; |
| | | var saveCount = 0; |
| | | var AddEquipList = new List<Dt_EquipmentAlarmInfor>(); |
| | | var UpdateEquipList = new List<Dt_EquipmentAlarmInfor>(); |
| | | var alarmList = new List<(string deviceType, string deviceName, string deviceCode)>(); |
| | | |
| | | // æ¶éææè®¾å¤ç¼ç ï¼ä¸æ¬¡æ§æ¥è¯¢ |
| | | var allDeviceCodes = new List<string>(); |
| | | if (response.data?.robot != null && response.data.robot.Count > 0) |
| | | { |
| | | allDeviceCodes.AddRange(response.data.robot.Select(x => x.robotCode)); |
| | | } |
| | | if (response.data?.sorters != null && response.data.sorters.Count > 0) |
| | | { |
| | | allDeviceCodes.AddRange(response.data.sorters.Select(x => x.sorterCode)); |
| | | } |
| | | |
| | | // 䏿¬¡æ§æ¥è¯¢ææå·²åå¨ç设å¤è®°å½ |
| | | var existingRecords = allDeviceCodes.Any() |
| | | ? BaseDal.QueryData(x => allDeviceCodes.Contains(x.RobotCode)) |
| | | .ToDictionary(x => x.RobotCode, x => x) |
| | | : new Dictionary<string, Dt_EquipmentAlarmInfor>(); |
| | | |
| | | // å¤çæºå¨äººè®¾å¤æ°æ® |
| | | if (response.data?.robot != null && response.data.robot.Any()) |
| | | if (response.data?.robot != null && response.data.robot.Count > 0) |
| | | { |
| | | foreach (var robot in response.data.robot) |
| | | { |
| | | // æ ¹æ®è®¾å¤ç¼ç æ¥è¯¢æ¯å¦åå¨è®°å½ |
| | | var existingRecord = BaseDal.QueryData(x => x.RobotCode == robot.robotCode).FirstOrDefault(); |
| | | |
| | | if (existingRecord == null) |
| | | { |
| | | // å建æ°è®°å½ |
| | | var newRecord = new Dt_EquipmentAlarmInfor |
| | | { |
| | | RobotName = robot.robotName, |
| | | RobotCode = robot.robotCode, |
| | | Status = robot.status, |
| | | SyncTime = syncTime, |
| | | CreateDate = syncTime, |
| | | Creater = "System" |
| | | }; |
| | | BaseDal.AddData(newRecord); |
| | | if (robot.status == "error") |
| | | { |
| | | _messageInfoService.AddMessageInfo(MessageGroupByEnum.EquipmentAlarm, "å°è½¦åç§°:" + robot.robotName, $"å°è½¦ç¼å·ã{robot.robotCode}ãåçé误", MessageStatusEnum.Emergency); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // æ´æ°ç°æè®°å½ |
| | | existingRecord.RobotName = robot.robotName; |
| | | existingRecord.Status = robot.status; |
| | | existingRecord.SyncTime = syncTime; |
| | | existingRecord.ModifyDate = syncTime; |
| | | existingRecord.Modifier = "System"; |
| | | BaseDal.UpdateData(existingRecord); |
| | | if (robot.status == "error") |
| | | { |
| | | _messageInfoService.AddMessageInfo(MessageGroupByEnum.EquipmentAlarm, "å°è½¦åç§°:" + robot.robotName, $"å°è½¦ç¼å·ã{robot.robotCode}ãåçé误", MessageStatusEnum.Emergency); |
| | | } |
| | | } |
| | | saveCount++; |
| | | ProcessDevice(robot.robotCode, robot.robotName, robot.status, "æºå¨äºº", |
| | | existingRecords, AddEquipList, UpdateEquipList, alarmList, syncTime); |
| | | } |
| | | } |
| | | |
| | | // å¤ç忣å°è®¾å¤æ°æ® |
| | | if (response.data?.sorters != null && response.data.sorters.Any()) |
| | | if (response.data?.sorters != null && response.data.sorters.Count > 0) |
| | | { |
| | | foreach (var sorter in response.data.sorters) |
| | | { |
| | | // æ ¹æ®è®¾å¤ç¼ç æ¥è¯¢æ¯å¦åå¨è®°å½ |
| | | var existingRecord = BaseDal.QueryData(x => x.RobotCode == sorter.sorterCode).FirstOrDefault(); |
| | | |
| | | if (existingRecord == null) |
| | | { |
| | | // å建æ°è®°å½ |
| | | var newRecord = new Dt_EquipmentAlarmInfor |
| | | { |
| | | RobotName = sorter.sorterName, |
| | | RobotCode = sorter.sorterCode, |
| | | Status = sorter.status, |
| | | SyncTime = syncTime, |
| | | CreateDate = syncTime, |
| | | Creater = "System" |
| | | }; |
| | | BaseDal.AddData(newRecord); |
| | | if (sorter.status == "error") |
| | | { |
| | | _messageInfoService.AddMessageInfo(MessageGroupByEnum.EquipmentAlarm, "忣å°åç§°:" + sorter.sorterName, $"ç¼å·ã{sorter.sorterCode}ãåçé误", MessageStatusEnum.Emergency); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // æ´æ°ç°æè®°å½ |
| | | existingRecord.RobotName = sorter.sorterName; |
| | | existingRecord.Status = sorter.status; |
| | | existingRecord.SyncTime = syncTime; |
| | | existingRecord.ModifyDate = syncTime; |
| | | existingRecord.Modifier = "System"; |
| | | BaseDal.UpdateData(existingRecord); |
| | | if (sorter.status == "error") |
| | | { |
| | | _messageInfoService.AddMessageInfo(MessageGroupByEnum.EquipmentAlarm, "忣å°åç§°:" + sorter.sorterName, $"ç¼å·ã{sorter.sorterCode}ãåçé误", MessageStatusEnum.Emergency); |
| | | } |
| | | } |
| | | saveCount++; |
| | | ProcessDevice(sorter.sorterCode, sorter.sorterName, sorter.status, "忣å°", |
| | | existingRecords, AddEquipList, UpdateEquipList, alarmList, syncTime); |
| | | } |
| | | } |
| | | |
| | | //// è¿åç¶æç»è®¡ä¿¡æ¯ |
| | | //var stateStats = response.data?.stateStatistics; |
| | | //var statsInfo = stateStats != null ? |
| | | // $"å¯ç¨:{stateStats.enable}, å
çµ:{stateStats.charging}, ä¸å¯ç¨:{stateStats.disabled}, é误:{stateStats.error}, 离åº:{stateStats.down}, å ç¨:{stateStats.occupied}" |
| | | // : "æ ç»è®¡ä¿¡æ¯"; |
| | | // å¼å¯äºå¡ |
| | | //_unitOfWorkManage.BeginTran(); |
| | | try |
| | | { |
| | | // æ¹éæä½ |
| | | if (AddEquipList.Count > 0) |
| | | { |
| | | BaseDal.AddData(AddEquipList); |
| | | } |
| | | if (UpdateEquipList.Count > 0) |
| | | { |
| | | BaseDal.UpdateData(UpdateEquipList); |
| | | } |
| | | |
| | | // æäº¤äºå¡ |
| | | //_unitOfWorkManage.CommitTran(); |
| | | |
| | | // å¤çæ¥è¦ä¿¡æ¯ |
| | | ProcessAlarmMessages(alarmList); |
| | | |
| | | var totalCount = AddEquipList.Count + UpdateEquipList.Count; |
| | | return new WebResponseContent |
| | | { |
| | | Status = true, |
| | | Message = $"忥æåï¼å
±å¤ç {saveCount} æ¡è®¾å¤è®°å½ã" |
| | | Message = $"忥æåï¼æ°å¢ {AddEquipList.Count} æ¡ï¼æ´æ° {UpdateEquipList.Count} æ¡ï¼å
±å¤ç {totalCount} æ¡è®¾å¤è®°å½ã" |
| | | }; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | // è®°å½è¯¦ç»é误æ¥å¿ |
| | | Console.WriteLine($"è·å设å¤ç¶æå¼å¸¸: {ex.Message}, StackTrace: {ex.StackTrace}"); |
| | | |
| | | //_unitOfWorkManage.RollbackTran(); |
| | | return new WebResponseContent |
| | | { |
| | | Status = false, |
| | | Message = $"æ°æ®ä¿å失败: {ex.Message}" |
| | | }; |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return new WebResponseContent |
| | | { |
| | | Status = false, |
| | |
| | | }; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å¤çå个设å¤è®°å½ |
| | | /// </summary> |
| | | private void ProcessDevice(string deviceCode, string deviceName, string status, string deviceType, |
| | | Dictionary<string, Dt_EquipmentAlarmInfor> existingRecords, |
| | | List<Dt_EquipmentAlarmInfor> addList, |
| | | List<Dt_EquipmentAlarmInfor> updateList, |
| | | List<(string deviceType, string deviceName, string deviceCode)> alarmList, |
| | | DateTime syncTime) |
| | | { |
| | | if (existingRecords.TryGetValue(deviceCode, out var existingRecord)) |
| | | { |
| | | // æ£æ¥ç¶ææ¯å¦åçååï¼é¿å
ä¸å¿
è¦çæ´æ°åé夿¥è¦ |
| | | bool statusChanged = existingRecord.Status != status; |
| | | |
| | | // æ´æ°ç°æè®°å½ |
| | | existingRecord.RobotName = deviceName; |
| | | existingRecord.Status = status; |
| | | existingRecord.SyncTime = syncTime; |
| | | existingRecord.ModifyDate = syncTime; |
| | | existingRecord.Modifier = "System"; |
| | | |
| | | updateList.Add(existingRecord); |
| | | |
| | | // åªæç¶æå为erroræ¶ææ¥è¦ |
| | | if (statusChanged && status == "error") |
| | | { |
| | | alarmList.Add((deviceType, deviceName, deviceCode)); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // å建æ°è®°å½ |
| | | var newRecord = new Dt_EquipmentAlarmInfor |
| | | { |
| | | RobotName = deviceName, |
| | | RobotCode = deviceCode, |
| | | Status = status, |
| | | SyncTime = syncTime, |
| | | CreateDate = syncTime, |
| | | Creater = "System" |
| | | }; |
| | | addList.Add(newRecord); |
| | | |
| | | // æ°è®¾å¤ç¶æä¸ºerroræ¶æ¥è¦ |
| | | if (status == "error") |
| | | { |
| | | alarmList.Add((deviceType, deviceName, deviceCode)); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å¤çæ¥è¦ä¿¡æ¯ |
| | | /// </summary> |
| | | private void ProcessAlarmMessages(List<(string deviceType, string deviceName, string deviceCode)> alarmList) |
| | | { |
| | | foreach (var alarm in alarmList) |
| | | { |
| | | string alarmTitle = alarm.deviceType == "æºå¨äºº" |
| | | ? "å°è½¦åç§°:" + alarm.deviceName |
| | | : "忣å°åç§°:" + alarm.deviceName; |
| | | |
| | | string alarmMessage = alarm.deviceType == "æºå¨äºº" |
| | | ? $"å°è½¦ç¼å·ã{alarm.deviceCode}ãåçé误" |
| | | : $"ç¼å·ã{alarm.deviceCode}ãåçé误"; |
| | | |
| | | _messageInfoService.AddMessageInfo(MessageGroupByEnum.EquipmentAlarm, alarmTitle, alarmMessage, MessageStatusEnum.Emergency); |
| | | } |
| | | } |
| | | } |
| | | } |