dengjunjie
5 天以前 208ba32323f73ade277e230b78fde2db04f860ac
н¨Îļþ¼Ð/WIDESEA_WMSServer/ClassLibrary2/EquipmentAlarmInforService.cs
@@ -7,6 +7,7 @@
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;
@@ -20,131 +21,101 @@
{
    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;
        }
        /// <summary>
        /// æŸ¥çœ‹ç«‹åº“小车报警信息
        /// </summary>
        /// <returns></returns>
        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")
                {
                    return new WebResponseContent { Status = false, Message = $"WCS接口调用失败: {response?.msg}" };
                }
                var syncTime = DateTime.Now;
                var saveCount = 0;
                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}");
                // å¤„理机器人设备数据
                if (response.data?.robot != null && response.data.robot.Any())
                {
                    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++;
                    }
                }
                codes.AddRange(response.data.robot.Select(x => x.robotCode).ToList());
                // å¤„理分拣台设备数据
                if (response.data?.sorters != null && response.data.sorters.Any())
                {
                    foreach (var sorter in response.data.sorters)
                    {
                        // æ ¹æ®è®¾å¤‡ç¼–码查询是否存在记录
                        var existingRecord = BaseDal.QueryData(x => x.RobotCode == sorter.sorterCode).FirstOrDefault();
                codes.AddRange(response.data.sorters.Select(x => x.sorterCode).ToList());
                        if (existingRecord == null)
                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()
                        {
                            // åˆ›å»ºæ–°è®°å½•
                            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++;
                            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.robotCode, item.status);
                    }
                }
                //// è¿”回状态统计信息
                //var stateStats = response.data?.stateStatistics;
                //var statsInfo = stateStats != null ?
                //    $"可用:{stateStats.enable}, å……电:{stateStats.charging}, ä¸å¯ç”¨:{stateStats.disabled}, é”™è¯¯:{stateStats.error}, ç¦»åº“:{stateStats.down}, å ç”¨:{stateStats.occupied}"
                //    : "无统计信息";
                return new WebResponseContent
                foreach (var item in response.data.sorters)
                {
                    Status = true,
                    Message = $"同步成功,共处理 {saveCount} æ¡è®¾å¤‡è®°å½•。"
                };
                    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)
            {
                // è®°å½•详细错误日志
                Console.WriteLine($"获取设备状态异常: {ex.Message}, StackTrace: {ex.StackTrace}");
                return new WebResponseContent
                {
                    Status = false,
                    Message = $"获取设备状态失败: {ex.Message}"
                };
                content.Error(ex.Message);
            }
            return content;
        }
    }
}
}