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; using System.Text; using System.Threading.Tasks; using WIDESEA_Common; 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>, IMessageInfoService { private readonly ICacheService _cacheService; private readonly WebSocketServer _webSocketServer; public MessageInfoService(IRepository BaseDal, ICacheService cacheService, WebSocketServer webSocketServer) : base(BaseDal) { _cacheService = cacheService; _webSocketServer = webSocketServer; } public IRepository Repository => BaseDal; /// /// 添加通知信息 /// /// /// /// /// /// /// public WebResponseContent AddMessageInfo(MessageGroupByEnum groupByEnum, string messageName, string messageInfo, MessageStatusEnum statusEnum = MessageStatusEnum.Undisposed, string messageRemark = "") { WebResponseContent content = new WebResponseContent(); try { Dt_MessageInfo dt_MessageInfo = null; if (groupByEnum == MessageGroupByEnum.InventoryExceedAlarm) dt_MessageInfo = BaseDal.QueryFirst(x => x.MessageName == messageName && x.MessageRemark == messageRemark); else dt_MessageInfo = BaseDal.QueryFirst(x => x.MessageName == messageName && x.MessageInfo == messageInfo); if (groupByEnum != MessageGroupByEnum.InventoryExceedAlarm && dt_MessageInfo != null) return content; if (dt_MessageInfo == null) { dt_MessageInfo = new Dt_MessageInfo(); dt_MessageInfo.MessageGroupBy = groupByEnum.ObjToInt(); dt_MessageInfo.MessageStatus = statusEnum.ObjToInt(); dt_MessageInfo.MessageName = messageName; dt_MessageInfo.MessageInfo = messageInfo; dt_MessageInfo.MessageRemark = messageRemark; BaseDal.AddData(dt_MessageInfo); } else { if (dt_MessageInfo.MessageGroupBy == MessageGroupByEnum.InventoryExceedAlarm.ObjToInt()) { if (dt_MessageInfo.MessageInfo == messageInfo) return content; dt_MessageInfo.MessageStatus = statusEnum.ObjToInt(); dt_MessageInfo.MessageName = messageName; dt_MessageInfo.MessageInfo = messageInfo; dt_MessageInfo.MessageRemark = messageRemark; BaseDal.UpdateData(dt_MessageInfo); } } } catch (Exception ex) { content.Error(ex.Message); } return content; } public override WebResponseContent DeleteData(object[] keys) { return DeleteAndIntoHty(keys); //return base.DeleteData(keys); } public WebResponseContent DeleteAndIntoHty(object[] keys) { WebResponseContent content = new WebResponseContent(); try { List messageInfos = BaseDal.QueryData(x => keys.Contains(x.Id)); List ints = new List(); foreach (var item in messageInfos) { item.MessageStatus = MessageStatusEnum.Processed.ObjToInt(); item.Modifier = App.User.UserName; ints.Add(item.Id); } BaseDal.DeleteAndMoveIntoHty(messageInfos, OperateTypeEnum.人工完成); string MessageInfo = _cacheService.Get("MessageInfo"); if (!string.IsNullOrEmpty(MessageInfo)) { List? messages = JsonConvert.DeserializeObject>(MessageInfo); if (messages != null) { messages = messages.Where(x => !ints.Contains(x.Id)).ToList(); _cacheService.AddOrUpdate("MessageInfo", JsonConvert.SerializeObject(messages)); } } content.OK("处理成功"); } catch (Exception ex) { content.Error(ex.Message); } return content; } public void GetMessageInfo() { try { List messagesinfo = new List(); string MessageInfo = _cacheService.Get("MessageInfo"); if (!string.IsNullOrEmpty(MessageInfo)) { List? messages = JsonConvert.DeserializeObject>(MessageInfo); if (messages != null) { messagesinfo = messages; } } var messinfo = BaseDal.QueryData(x => x.MessageStatus < MessageStatusEnum.Wait.ObjToInt()); messagesinfo = messagesinfo.Where(x => !messinfo.Select(x => x.Id).Contains(x.Id)).ToList(); 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)); item.MessageStatus = MessageStatusEnum.Wait.ObjToInt(); } if (messagesinfo.Count > 0) _cacheService.AddOrUpdate("MessageInfo", JsonConvert.SerializeObject(messagesinfo)); BaseDal.UpdateData(messinfo); } 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; } } }