dengjunjie
4 天以前 1b8daa902b075c7cedee7bbcc13b914b7a5b4ad4
н¨Îļþ¼Ð/WIDESEA_WMSServer/ClassLibrary2/ContainerService.cs
@@ -1,25 +1,194 @@
using HslCommunication;
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
using Quartz.Util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.SquareCabin;
using WIDESEA_IWMsInfoServices;
using WIDESEA_Model.Models;
using static WIDESEA_DTO.SquareCabin.AlarmDto;
using static WIDESEA_DTO.SquareCabin.TowcsDto;
namespace WIDESEA_WMsInfoServices
{
    public class ContainerService : ServiceBase<Dt_Container, IRepository<Dt_Container>>, IContainerService
    {
        public ContainerService(IRepository<Dt_Container> BaseDal) : base(BaseDal)
        private readonly IMessageInfoService _messageInfoService;
        public ContainerService(IRepository<Dt_Container> BaseDal, IMessageInfoService messageInfoService) : base(BaseDal)
        {
            _messageInfoService = messageInfoService;
        }
        public IRepository<Dt_Container> Repository => BaseDal;
        public WebResponseContent Sensor()
        {
            try
            {
                var url = "http://172.16.1.4:8082/api/environment/sensor";
                var result = HttpHelper.Get(url);
                var response = JsonConvert.DeserializeObject<CollResponse<CoolDto>>(result);
                if (response == null || response.code != "000") throw new Exception("接口返回数据报错");
                var deviceNames = response.data.Select(x => x.name?.Trim()).Distinct().ToList();
                var containers = BaseDal.QueryData(x => deviceNames.Contains(x.deviceName)).ToList();
                List<Dt_Container> containersAdd = new List<Dt_Container>();
                List<Dt_Container> containersUp = new List<Dt_Container>();
                foreach (var item in response.data)
                {
                    Dt_Container? container = containers.Where(x => x.deviceName == item.name).FirstOrDefault();
                    if (container == null)
                    {
                        container = new Dt_Container()
                        {
                            deviceName = item.name,
                            Alarm = item.alarm,
                            CurrentTemperature = item.temperature,
                            Humidity = item.humidity,
                            CreateDate = DateTime.Now,
                            AlarmInformation = item.message
                        };
                        containersAdd.Add(container);
                    }
                    else
                    {
                        container.Alarm = item.alarm;
                        container.CurrentTemperature = item.temperature;
                        container.Humidity = item.humidity;
                        container.AlarmInformation = item.message;
                        container.ModifyDate = DateTime.Now;
                        containersUp.Add(container);
                    }
                    if (item.alarm != "正常")
                    {
                        _messageInfoService.AddMessageInfo(MessageGroupByEnum.EquipmentAlarm,
                            $"冷柜{item.name}{item.alarm}", item.message, MessageStatusEnum.Undisposed);
                    }
                }
                if (containersAdd.Count > 0) BaseDal.AddData(containersAdd);
                if (containersUp.Count > 0) BaseDal.UpdateData(containersUp);
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        public WebResponseContent Sensor1()
        {
            try
            {
                var url = "http://172.16.1.4:8082/api/environment/sensor";
                var result = HttpHelper.Get(url);
                var response = JsonConvert.DeserializeObject<CollResponse<CoolDto>>(result);
                if (response.code != "000" || response.data == null)
                {
                    return new WebResponseContent { Status = false, Message = "接口返回数据报错" };
                }
                // ä½¿ç”¨æ‰¹é‡æ“ä½œæé«˜æ€§èƒ½
                var updateList = new List<Dt_Container>();
                var addList = new List<Dt_Container>();
                var currentTime = DateTime.Now;
                // å…ˆæŸ¥è¯¢æ‰€æœ‰è®¾å¤‡ï¼Œé¿å…å¾ªçŽ¯ä¸­å¤šæ¬¡æŸ¥è¯¢æ•°æ®åº“
                var deviceNames = response.data.Select(x => x.name).Distinct().ToList();
                var existingDevices = BaseDal.QueryData(x => deviceNames.Contains(x.deviceName))
                                           .ToDictionary(x => x.deviceName, x => x);
                foreach (var item in response.data)
                {
                    if (existingDevices.TryGetValue(item.name, out var cool))
                    {
                        // æ›´æ–°çŽ°æœ‰è®°å½•
                        cool.CurrentTemperature = item.temperature;
                        cool.Humidity = item.humidity;
                        cool.Alarm = item.alarm;
                        cool.AlarmInformation = item.message;
                        cool.ModifyDate = currentTime;
                        updateList.Add(cool);
                        if (cool.Alarm!="正常")
                        {
                            _messageInfoService.AddMessageInfo(MessageGroupByEnum.EquipmentAlarm, $"冷柜{item.alarm}", item.message, MessageStatusEnum.Undisposed);
                        }
                    }
                    else
                    {
                        // åˆ›å»ºæ–°è®°å½•
                        var dto = new Dt_Container
                        {
                            deviceName = item.name,
                            CurrentTemperature = item.temperature,
                            Humidity = item.humidity,
                            Alarm = item.alarm,
                            AlarmInformation = item.message,
                            CreateDate = currentTime,
                            Creater = "System",
                            ModifyDate = currentTime,
                            Modifier = "System"
                        };
                        addList.Add(dto);
                        if (item.alarm != "正常")
                        {
                            _messageInfoService.AddMessageInfo(MessageGroupByEnum.EquipmentAlarm, $"冷柜{item.alarm}", item.message, MessageStatusEnum.Undisposed);
                        }
                    }
                }
                // å¼€å§‹äº‹åŠ¡
                Db.Ado.BeginTran();
                try
                {
                    // æ‰¹é‡æ’入新记录
                    if (addList.Any())
                    {
                        BaseDal.Db.Insertable(addList).ExecuteCommand();
                    }
                    // æ‰¹é‡æ›´æ–°çŽ°æœ‰è®°å½•
                    if (updateList.Any())
                    {
                        BaseDal.Db.Updateable(updateList).ExecuteCommand();
                    }
                    // æäº¤äº‹åŠ¡
                    Db.Ado.CommitTran();
                    return new WebResponseContent
                    {
                        Status = true,
                        Message = $"同步成功:新增{addList.Count}条,更新{updateList.Count}条"
                    };
                }
                catch (Exception ex)
                {
                    Db.Ado.RollbackTran();
                    return new WebResponseContent
                    {
                        Status = false,
                        Message = $"数据保存失败:{ex.Message}"
                    };
                }
            }
            catch (Exception ex)
            {
                return new WebResponseContent
                {
                    Status = false,
                    Message = $"接口调用失败:{ex.Message}"
                };
            }
        }
    }
}