yanjinhui
2025-10-24 4e9a3d6063aa619b020623a0ac6fcfa6d3b63e13
н¨Îļþ¼Ð/WIDESEA_WMSServer/ClassLibrary2/ContainerService.cs
@@ -1,18 +1,21 @@
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_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 WIDESEA_Model.Models.WMSInfo;
using static WIDESEA_DTO.SquareCabin.AlarmDto;
using static WIDESEA_DTO.SquareCabin.TowcsDto;
namespace WIDESEA_WMsInfoServices
@@ -22,5 +25,107 @@
        public ContainerService(IRepository<Dt_Container> BaseDal) : base(BaseDal)
        {
        }
        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?.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);
                    }
                    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);
                    }
                }
                // å¼€å§‹äº‹åŠ¡
                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}"
                };
            }
        }
    }
}