dengjunjie
10 天以前 b9d9c0e91d8bbdf411540daa0d5887140d6327f9
添加提示信息前端弹窗显示
已修改8个文件
219 ■■■■ 文件已修改
新建文件夹/WIDESEA_WMSServer/ClassLibrary1/IMessageInfoService.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
新建文件夹/WIDESEA_WMSServer/ClassLibrary2/MessageInfoService.cs 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
新建文件夹/WIDESEA_WMSServer/WIDESEA_Core/Extensions/WebSocketHostedService.cs 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
新建文件夹/WIDESEA_WMSServer/WIDESEA_WMSServer/AlarmJob.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
新建文件夹/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
新建文件夹/WMS/src/views/Index.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
新建文件夹/WMS/src/views/index/Message.vue 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
新建文件夹/WMS/src/views/index/MessageConfig.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
н¨Îļþ¼Ð/WIDESEA_WMSServer/ClassLibrary1/IMessageInfoService.cs
@@ -17,13 +17,14 @@
        /// <summary>
        /// æ·»åŠ é€šçŸ¥ä¿¡æ¯
        /// </summary>
        /// <param name="groupByEnum">报警分组</param>
        /// <param name="messageName">名字</param>
        /// <param name="messageInfo">报警信息</param>
        /// <param name="statusEnum">状态</param>
        /// <param name="groupByEnum"></param>
        /// <param name="messageName"></param>
        /// <param name="messageInfo"></param>
        /// <param name="statusEnum"></param>
        /// <param name="messageRemark"></param>
        /// <returns></returns>
        WebResponseContent AddMessageInfo(MessageGroupByEnum groupByEnum, string messageName, string messageInfo, MessageStatusEnum statusEnum = MessageStatusEnum.Undisposed, string messageRemark = "");
        WebResponseContent DeleteAndIntoHty(int[] keys);
        void GetMessageInfo();
    }
}
н¨Îļþ¼Ð/WIDESEA_WMSServer/ClassLibrary2/MessageInfoService.cs
@@ -1,4 +1,9 @@
using SqlSugar.Extensions;
using HslCommunication.WebSocket;
using NetTaste;
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using Quartz.Util;
using SqlSugar.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -8,16 +13,22 @@
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Caches;
using WIDESEA_Core.Enums;
using WIDESEA_IWMsInfoServices;
using WIDESEA_Model.Models;
using static WIDESEA_Core.WebSocketHostedService;
namespace WIDESEA_WMsInfoServices
{
    public class MessageInfoService : ServiceBase<Dt_MessageInfo, IRepository<Dt_MessageInfo>>, IMessageInfoService
    {
        public MessageInfoService(IRepository<Dt_MessageInfo> BaseDal) : base(BaseDal)
        private readonly ICacheService _cacheService;
        private readonly WebSocketServer _webSocketServer;
        public MessageInfoService(IRepository<Dt_MessageInfo> BaseDal, ICacheService cacheService, WebSocketServer webSocketServer) : base(BaseDal)
        {
            _cacheService = cacheService;
            _webSocketServer = webSocketServer;
        }
        public IRepository<Dt_MessageInfo> Repository => BaseDal;
@@ -87,5 +98,77 @@
            }
            return content;
        }
        public void GetMessageInfo()
        {
            try
            {
                List<int> keys = new List<int>();
                List<Message> messagesinfo = new List<Message>();
                string MessageInfo = _cacheService.Get("MessageInfo");
                if (!string.IsNullOrEmpty(MessageInfo))
                {
                    List<Message>? messages = JsonConvert.DeserializeObject<List<Message>>(MessageInfo);
                    if (messages != null)
                    {
                        messagesinfo = messages;
                        keys = messages.Select(x => x.Id).ToList();
                    }
                }
                var messinfo = BaseDal.QueryData(x => !keys.Contains(x.Id));
                foreach (var item in messinfo)
                {
                    Message message = new Message()
                    {
                        Id = item.Id,
                        MessageGroupBy = GetMessageGroupBy(item.MessageGroupBy),
                        MessageInfo = item.MessageInfo,
                        MessageName = item.MessageName,
                        Date = item.CreateDate,
                    };
                    messagesinfo.Add(message);
                    object obj = new
                    {
                        title = message.MessageGroupBy,
                        name = item.MessageName,
                        message = item.MessageInfo,
                        date = item.CreateDate,
                    };
                    if (_webSocketServer.OnlineCount > 0)
                        _webSocketServer.PublishAllClientPayload(JsonConvert.SerializeObject(obj));
                }
                _cacheService.AddOrUpdate("MessageInfo", JsonConvert.SerializeObject(messagesinfo));
            }
            catch (Exception ex)
            {
            }
        }
        public string GetMessageGroupBy(int GroupBy)
        {
            string MessageGroupBy = GroupBy.ToString();
            switch (GroupBy)
            {
                case (int)MessageGroupByEnum.EquipmentAlarm:
                    MessageGroupBy = "设备报警";
                    break;
                case (int)MessageGroupByEnum.InventoryExceedAlarm:
                    MessageGroupBy = "库存过期预警";
                    break;
                case (int)MessageGroupByEnum.InventoryLowAlarm:
                    MessageGroupBy = "低库存预警";
                    break;
                case (int)MessageGroupByEnum.MaterielAlarm:
                    MessageGroupBy = "物料待维护报警";
                    break;
                case (int)MessageGroupByEnum.InOrderAlarm:
                    MessageGroupBy = "入库单报警";
                    break;
                case (int)MessageGroupByEnum.OutOrderAlarm:
                    MessageGroupBy = "出库单报警";
                    break;
            }
            return MessageGroupBy;
        }
    }
}
н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_Core/Extensions/WebSocketHostedService.cs
@@ -2,6 +2,7 @@
using HslCommunication.WebSocket;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Org.BouncyCastle.Asn1.Ocsp;
using SqlSugar.Extensions;
using System;
@@ -10,20 +11,74 @@
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using WIDESEA_Core.Caches;
using WIDESEA_Core.Helper;
using WIDESEA_Core.Seed;
namespace WIDESEA_Core
{
    public class WebSocketHostedService : IHostedService
    {
        private readonly DBContext _dbContext;
        private readonly ICacheService _cacheService;
        private readonly WebSocketServer _webSocketServer;
        public WebSocketHostedService(WebSocketServer webSocketServer)
        public WebSocketHostedService(DBContext dbContext, ICacheService cacheService, WebSocketServer webSocketServer)
        {
            _webSocketServer = webSocketServer;
            _dbContext = dbContext;
            _cacheService = cacheService;
            _webSocketServer.OnClientConnected += webSocketServer_OnClientConnected;
        }
        private void webSocketServer_OnClientConnected(WebSocketSession session)
        {
            string MessageInfo = _cacheService.Get("MessageInfo");
            if (!string.IsNullOrEmpty(MessageInfo))
            {
                List<Message>? messages = JsonConvert.DeserializeObject<List<Message>>(MessageInfo);
                if (messages != null && messages.Count > 0)
                {
                    foreach (var item in messages)
                    {
                        object obj = new
                        {
                            title = item.MessageGroupBy,
                            name = item.MessageName,
                            message = item.MessageInfo,
                            date = DateTime.Now.ToString(),
                        };
                        //_webSocketServer.PublishAllClientPayload(obj.Serialize());
                        _webSocketServer.SendClientPayload(session, obj.Serialize());
                    }
                }
            }
        }
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            WebSocketSession? webSocketSession = _webSocketServer.OnlineSessions.FirstOrDefault(x => x.Url.Contains(App.User.UserName));
            string MessageInfo = _cacheService.Get("MessageInfo");
            if (!string.IsNullOrEmpty(MessageInfo))
            {
                List<Message>? messages = JsonConvert.DeserializeObject<List<Message>>(MessageInfo);
                if (messages != null && messages.Count > 0)
                {
                    foreach (var item in messages)
                    {
                        object obj = new
                        {
                            title = item.MessageGroupBy,
                            name = item.MessageName,
                            message = item.MessageInfo,
                            date = item.Date,
                        };
                        //_webSocketServer.PublishAllClientPayload(obj.Serialize());
                        if (webSocketSession != null)
                            _webSocketServer.SendClientPayload(webSocketSession, obj.Serialize());
                    }
                }
            }
            await Task.CompletedTask;
        }
@@ -31,5 +86,14 @@
        {
            await Task.CompletedTask;
        }
        public class Message
        {
            public int Id { get; set; }
            public string MessageGroupBy { get; set; }
            public string MessageName { get; set; }
            public string MessageInfo { get; set; }
            public DateTime Date { get; set; }
        }
    }
}
н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_WMSServer/AlarmJob.cs
@@ -9,19 +9,21 @@
    {
        private readonly IContainerService _containerService;
        private readonly IEquipmentAlarmInforService _equipmentAlarmInforService;
        public AlarmJob(IContainerService containerService, IEquipmentAlarmInforService equipmentAlarmInforService)
        private readonly IMessageInfoService _messageInfoService;
        public AlarmJob(IContainerService containerService, IEquipmentAlarmInforService equipmentAlarmInforService, IMessageInfoService messageInfoService)
        {
            _containerService = containerService;
            _equipmentAlarmInforService = equipmentAlarmInforService;
            _messageInfoService = messageInfoService;
        }
        //每隔1秒执行一次
        [Invoke(Begin = "2025-09-01", Interval = 1000 * 60, IsEnabled = false, SkipWhileExecuting = true)]
        [Invoke(Begin = "2025-09-01", Interval = 1000 * 5, IsEnabled = true, SkipWhileExecuting = true)]
        public void Run()
        {
            //冷库
            _containerService.Sensor();
            _equipmentAlarmInforService.getDeviceStatus();
            _messageInfoService.GetMessageInfo();
        }
    }
}
н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_WMSServer/Program.cs
@@ -45,6 +45,7 @@
builder.Services.AddWebSocketSetup();
builder.Services.AddSqlsugarSetup();//SqlSugar å¯åŠ¨æœåŠ¡
builder.Services.AddDbSetup();//Db å¯åŠ¨æœåŠ¡
builder.Services.AddHostedService<WebSocketHostedService>();//应用初始化服务注入
builder.Services.AddInitializationHostServiceSetup();//应用初始化服务注入
//builder.Services.AddHostedService<PermissionDataHostService>();//数据权限
н¨Îļþ¼Ð/WMS/src/views/Index.vue
@@ -315,6 +315,8 @@
    };
    const handleMessage = (e) => {
    //   console.log("WebSocket è¿žæŽ¥æˆåŠŸ");
    // console.log("WebSocket æˆåŠŸ:"+e.data);
      let data = JSON.parse(e.data);
      messageList.push(data);
      ElNotification({
@@ -325,6 +327,9 @@
    };
    const createSocket = (url) => {
      if (client && client.readyState === WebSocket.OPEN) {
        return; // é¿å…é‡å¤åˆ›å»ºè¿žæŽ¥
      }
      // åˆ›å»ºWebSocket连接
      //"ws://127.0.0.1:9295/admin"
      client = new WebSocket(url);
@@ -333,6 +338,7 @@
        client.onmessage = handleMessage;
        store.commit("setWebsocket", client);
        console.log("WebSocket è¿žæŽ¥æˆåŠŸ");
        // client.send("发送数据");
      };
      client.onclose = function () {
@@ -340,7 +346,7 @@
        setTimeout(createSocket, 10000);
      };
      client.onerror = function () {};
      client.onerror = function (error) {console.error("WebSocket错误:", error);};
    };
    const changeTheme = (name) => {
н¨Îļþ¼Ð/WMS/src/views/index/Message.vue
@@ -5,31 +5,31 @@
      <div class="content">
        <el-row>
          <el-col :span="8">
            <label>收货单号:{{ item.formData.receiveOrderNo }}</label>
            <label>{{ item.name}}</label>
          </el-col>
          <!-- <el-col :span="16">
            <label>信息:{{ item.message }}</label>
          </el-col>
          <el-col :span="8">
            <label>质检单号:{{ item.formData.checkOrderNo }}</label>
          </el-col>
          <el-col :span="8">
            <label>收货明细行号:{{ item.formData.receiveDetailRowNo }}</label>
          </el-col>
            <label>收货明细行号:{{ item.message }}</label>
          </el-col> -->
        </el-row>
        <el-row>
          <el-col :span="8">
            <label>物料编号:{{ item.formData.materielCode }}</label>
          <el-col :span="24">
            <label>信息:{{ item.message }}</label>
          </el-col>
          <el-col :span="8">
          <!-- <el-col :span="8">
            <label>合格数量:{{ item.formData.qualifiedQuantity }}</label>
          </el-col>
          <el-col :span="8">
            <label>特采数量:{{ item.formData.defectedQuantity }}</label>
          </el-col>
          </el-col> -->
        </el-row>
        <el-row>
        <!-- <el-row>
          <el-col :span="8">
            <label>退货数量:{{ item.formData.returnQuantity }}</label>
            <label>退货数量:{{ item.message }}</label>
          </el-col>
          <el-col :span="8">
            <label>报废数量:{{ item.formData.scrappedQuantity }}</label>
@@ -37,20 +37,20 @@
          <el-col :span="8">
            <label>质检总数:{{ item.formData.receivedQuantity }}</label>
          </el-col>
        </el-row>
        </el-row> -->
        
        <el-row>
        <!-- <el-row>
          <el-col :span="16">
            <label>特采说明:{{ item.formData.defectedNote }}</label>
            <label>特采说明:{{ item.title }}</label>
          </el-col>
          <el-col :span="8">
            <label>检验人:{{ item.formData.checkUserName }}</label>
            <label>检验人:{{ item.message }}</label>
          </el-col>
        </el-row>
        </el-row> -->
      </div>
      <div style="margin-top: 20px">
        <el-button type="primary">同意</el-button
        ><el-button type="danger">驳回</el-button>
        <el-button type="primary">已处理</el-button>
        <!-- <el-button type="danger">驳回</el-button> -->
      </div>
    </div>
  </div>
н¨Îļþ¼Ð/WMS/src/views/index/MessageConfig.js
@@ -10,7 +10,7 @@
     //.withUrl(`${http.ipAddress}message`)
      .build();
    connection.start().catch((err) => console.log(ex.message));
    connection.start().catch((err) => console.log(err.message));
    //自动重连成功后的处理
    connection.onreconnected((connectionId) => {
      console.log(connectionId);