From 5b8bf171b9afda52fa366a72e54eedbd9e6d4d17 Mon Sep 17 00:00:00 2001
From: yanjinhui <3306209981@qq.com>
Date: 星期六, 01 十一月 2025 19:54:25 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/ZhiHuiQiCe/FangCangZhiNeng

---
 新建文件夹/WIDESEA_WMSServer/ClassLibrary2/EquipmentAlarmInforService.cs |  305 +++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 227 insertions(+), 78 deletions(-)

diff --git "a/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/ClassLibrary2/EquipmentAlarmInforService.cs" "b/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/ClassLibrary2/EquipmentAlarmInforService.cs"
index 0c8c8c1..7d61267 100644
--- "a/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/ClassLibrary2/EquipmentAlarmInforService.cs"
+++ "b/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/ClassLibrary2/EquipmentAlarmInforService.cs"
@@ -4,8 +4,10 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Security.Policy;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_Common;
 using WIDESEA_Core;
 using WIDESEA_Core.BaseRepository;
 using WIDESEA_Core.BaseServices;
@@ -19,23 +21,110 @@
 {
     public class EquipmentAlarmInforService : ServiceBase<Dt_EquipmentAlarmInfor, IRepository<Dt_EquipmentAlarmInfor>>, IEquipmentAlarmInforService
     {
-        public EquipmentAlarmInforService(IRepository<Dt_EquipmentAlarmInfor> BaseDal) : base(BaseDal)
+        private readonly IMessageInfoService _messageInfoService;
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+
+        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/PORT/cube/taskInfo/getDeviceStatus";
-
-                // 璋冪敤WCS鎺ュ彛鑾峰彇璁惧鐘舵��
+                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);
 
@@ -46,97 +135,86 @@
                 }
 
                 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);
-                        }
-                        else
-                        {
-                            // 鏇存柊鐜版湁璁板綍
-                            existingRecord.RobotName = robot.robotName;
-                            existingRecord.Status = robot.status;
-                            existingRecord.SyncTime = syncTime;
-                            existingRecord.ModifyDate = syncTime;
-                            existingRecord.Modifier = "System";
-                            BaseDal.UpdateData(existingRecord);
-                        }
-                        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);
-                        }
-                        else
-                        {
-                            // 鏇存柊鐜版湁璁板綍
-                            existingRecord.RobotName = sorter.sorterName;
-                            existingRecord.Status = sorter.status;
-                            existingRecord.SyncTime = syncTime;
-                            existingRecord.ModifyDate = syncTime;
-                            existingRecord.Modifier = "System";
-                            BaseDal.UpdateData(existingRecord);
-                        }
-                        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}"
-                //    : "鏃犵粺璁′俊鎭�";
-
-                return new WebResponseContent
+                // 寮�鍚簨鍔�
+                //_unitOfWorkManage.BeginTran();
+                try
                 {
-                    Status = true,
-                    Message = $"鍚屾鎴愬姛锛屽叡澶勭悊 {saveCount} 鏉¤澶囪褰曘��"
-                };
+                    // 鎵归噺鎿嶄綔
+                    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 = $"鍚屾鎴愬姛锛屾柊澧� {AddEquipList.Count} 鏉★紝鏇存柊 {UpdateEquipList.Count} 鏉★紝鍏卞鐞� {totalCount} 鏉¤澶囪褰曘��"
+                    };
+                }
+                catch (Exception ex)
+                {
+                    //_unitOfWorkManage.RollbackTran();
+                    return new WebResponseContent
+                    {
+                        Status = false,
+                        Message = $"鏁版嵁淇濆瓨澶辫触: {ex.Message}"
+                    };
+                }
             }
             catch (Exception ex)
             {
-                // 璁板綍璇︾粏閿欒鏃ュ織
-                Console.WriteLine($"鑾峰彇璁惧鐘舵�佸紓甯�: {ex.Message}, StackTrace: {ex.StackTrace}");
-
                 return new WebResponseContent
                 {
                     Status = false,
@@ -144,5 +222,76 @@
                 };
             }
         }
+
+        /// <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);
+
+                // 鍙湁鐘舵�佸彉涓篹rror鏃舵墠鎶ヨ
+                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);
+            }
+        }
     }
-}
+}
\ No newline at end of file

--
Gitblit v1.9.3