From f44c5df9cc045644982f578fb0b3c3e60b88eb68 Mon Sep 17 00:00:00 2001
From: wxw <Administrator@DESKTOP-5BIMHQ3>
Date: 星期三, 25 九月 2024 18:54:17 +0800
Subject: [PATCH] 修改分拣任务读取

---
 Admin.NET/WCS.Application/Hub/CheckTaskHub.cs                         |   51 ++++++++++++
 Web/src/views/device/sortPallet/index.vue                             |   17 ++++
 Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs |   35 ++++++++
 Admin.NET/WCS.Application/Hub/HubUtil.cs                              |   14 +++
 Admin.NET/WCS.Application/Entity/WcsCheckTask.cs                      |    4 
 Admin.NET/WCS.Application/Hub/ICheckTaskHub.cs                        |   19 ++++
 Web/src/views/device/sortPallet/signalR.ts                            |   45 +++++++++++
 7 files changed, 180 insertions(+), 5 deletions(-)

diff --git a/Admin.NET/WCS.Application/Entity/WcsCheckTask.cs b/Admin.NET/WCS.Application/Entity/WcsCheckTask.cs
index 4d888c8..96428a6 100644
--- a/Admin.NET/WCS.Application/Entity/WcsCheckTask.cs
+++ b/Admin.NET/WCS.Application/Entity/WcsCheckTask.cs
@@ -105,14 +105,14 @@
     /// 鎵规鍋忕Щ閲�
     /// </summary>
     [Required]
-    [SugarColumn(ColumnName = "PlcPos", ColumnDescription = "鎵规鍋忕Щ閲�", Length = 10)]
+    [SugarColumn(ColumnName = "PosLot", ColumnDescription = "鎵规鍋忕Щ閲�", Length = 10)]
     public string PosLot { get; set; }
 
     /// <summary>
     /// 鎵规娴佺▼瀛楃被鍨�
     /// </summary>
     [Required]
-    [SugarColumn(ColumnName = "PosType", ColumnDescription = "鎵规娴佺▼瀛楃被鍨�")]
+    [SugarColumn(ColumnName = "PosTypeLot", ColumnDescription = "鎵规娴佺▼瀛楃被鍨�")]
     public PLCDataTypeEnum PosTypeLot { get; set; }
 
     /// <summary>
diff --git a/Admin.NET/WCS.Application/Hub/CheckTaskHub.cs b/Admin.NET/WCS.Application/Hub/CheckTaskHub.cs
new file mode 100644
index 0000000..65e0d75
--- /dev/null
+++ b/Admin.NET/WCS.Application/Hub/CheckTaskHub.cs
@@ -0,0 +1,51 @@
+锘縰sing Furion.InstantMessaging;
+using Microsoft.AspNetCore.SignalR;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WCS.Application.Service.WcsDevice.Dto;
+
+namespace WCS.Application.Hub;
+/// <summary>
+/// 
+/// </summary>
+[MapHub("/hubs/CheckTask")]
+public class CheckTaskHub : Hub<ICheckTaskHub>
+{
+    private readonly IHubContext<CheckTaskHub, ICheckTaskHub> _checkTaskHubContext;
+
+    public CheckTaskHub(IHubContext<CheckTaskHub, ICheckTaskHub> checkTaskHubContext)
+    {
+        _checkTaskHubContext = checkTaskHubContext;
+    }
+
+    /// <summary>
+    /// 杩炴帴
+    /// </summary>
+    /// <returns></returns>
+    public override async Task OnConnectedAsync()
+    {
+        await base.OnConnectedAsync();
+    }
+
+    /// <summary>
+    /// 鏂紑
+    /// </summary>
+    /// <param name="exception"></param>
+    /// <returns></returns>
+    public override async Task OnDisconnectedAsync(Exception exception)
+    {
+        await base.OnDisconnectedAsync(exception);
+    }
+
+    /// <summary>
+    /// 涓嬪彂鍒嗘嫞浠诲姟
+    /// </summary>
+    /// <returns></returns>
+    public async Task PublicCheckTask(WcsDeviceTaskOrderDto context)
+    {
+        await _checkTaskHubContext.Clients.All.PublicCheckTask(context);
+    }
+}
diff --git a/Admin.NET/WCS.Application/Hub/HubUtil.cs b/Admin.NET/WCS.Application/Hub/HubUtil.cs
index 988aab8..fadebde 100644
--- a/Admin.NET/WCS.Application/Hub/HubUtil.cs
+++ b/Admin.NET/WCS.Application/Hub/HubUtil.cs
@@ -4,6 +4,8 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WCS.Application.Hub;
+using WCS.Application.Service.WcsDevice.Dto;
 
 namespace WCS.Application;
 public static class HubUtil
@@ -11,6 +13,7 @@
     private static readonly IHubContext<PlcHub, IPlcHub> _plcHubContext = App.GetService<IHubContext<PlcHub, IPlcHub>>();
     private static readonly IHubContext<PlcDeviceHub, IPlcDeviceHub> _plcDeviceHubContext = App.GetService<IHubContext<PlcDeviceHub, IPlcDeviceHub>>();
     private static readonly IHubContext<TaskLogHub, ITaskLogHub> _taskLogHubContext = App.GetService<IHubContext<TaskLogHub, ITaskLogHub>>();
+    private static readonly IHubContext<CheckTaskHub, ICheckTaskHub> _checkTaskHubContext = App.GetService<IHubContext<CheckTaskHub, ICheckTaskHub>>();
 
     /// <summary>
     /// 涓嬪彂PLC杩炴帴鐘舵��
@@ -85,4 +88,15 @@
         if (PLCTaskAction.boRefresh)
             await _plcDeviceHubContext.Clients.All.PublicPlcDevice(context);
     }
+
+    /// <summary>
+    /// 涓嬪彂鍒嗘嫞浠诲姟淇℃伅
+    /// </summary>
+    /// <param name="context"></param>
+    /// <returns></returns>
+    public static async Task PublicCheckTask(WcsDeviceTaskOrderDto context)
+    {
+        if (PLCTaskAction.boRefresh)
+            await _checkTaskHubContext.Clients.All.PublicCheckTask(context);
+    }
 }
diff --git a/Admin.NET/WCS.Application/Hub/ICheckTaskHub.cs b/Admin.NET/WCS.Application/Hub/ICheckTaskHub.cs
new file mode 100644
index 0000000..4ad2213
--- /dev/null
+++ b/Admin.NET/WCS.Application/Hub/ICheckTaskHub.cs
@@ -0,0 +1,19 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WCS.Application.Service.WcsDevice.Dto;
+
+namespace WCS.Application.Hub
+{
+    public interface ICheckTaskHub
+    {
+        /// <summary>
+        /// 涓嬪彂鍒嗘嫞浠诲姟淇℃伅
+        /// </summary>
+        /// <param name="context"></param>
+        /// <returns></returns>
+        Task PublicCheckTask(WcsDeviceTaskOrderDto context);
+    }
+}
diff --git a/Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs b/Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs
index 91deb8c..154209a 100644
--- a/Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs
+++ b/Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs
@@ -6,6 +6,7 @@
 
 using Admin.NET.Core.Service;
 using AngleSharp.Dom;
+using DocumentFormat.OpenXml.Vml.Office;
 using Elastic.Clients.Elasticsearch.Tasks;
 using Microsoft.AspNetCore.Http;
 using WCS.Application.Entity;
@@ -147,13 +148,13 @@
     }
 
     /// <summary>
-    /// 鎵嬪姩缁戝畾浠诲姟鍒癙LC
+    /// 鎵嬪姩缁戝畾浠诲姟
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpPost]
     [ApiDescriptionSettings(Name = "BindTaskForPLC")]
-    [DisplayName("鎵嬪姩缁戝畾浠诲姟鍒癙LC")]
+    [DisplayName("鎵嬪姩缁戝畾浠诲姟")]
     public async Task BindTaskForPLC(BindTaskPLCInput input)
     {
         var deviceInfo = await _wcsDeviceRep.GetByIdAsync(input.deviceId);
@@ -211,6 +212,11 @@
         #endregion
     }
 
+    /// <summary>
+    /// 浠诲姟缁撴壒
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
     [HttpPost]
     [ApiDescriptionSettings(Name = "CloseTaskForPLC")]
     [DisplayName("浠诲姟缁撴壒")]
@@ -253,6 +259,31 @@
                 //鏇存柊鍒嗘嫞浠诲姟
                 await _wcsCheckTaskRep.AsUpdateable(item).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
             }
+
+            //Service.WcsDevice.Dto.WcsDeviceTaskOrderDto order=  await _wcsDeviceRep.Context.Queryable<WcsDevice>()
+            //    .InnerJoin<WcsPlc>((device, plc) => device.PlcId == plc.Id)
+            //    .LeftJoin<WcsCheckTask>((device, plc, task) => device.StationNum == task.Port)
+            //    .Where((device, plc, task) => device.PlcId == 1000 && task.Port=="")
+            //    .Select((device, plc, task) => new Service.WcsDevice.Dto.WcsDeviceTaskOrderDto()
+            //    {
+            //        Id = device.Id,
+            //        Text = device.Text,
+            //        TaskNo = task.TaskNo,
+            //        OrderNo = task.OrderNo,
+            //        LotNo = task.LotNo,
+            //        SkuNo = task.SkuNo,
+            //        SkuName = task.SkuName,
+            //        LineNo = task.LineNo,
+            //        Status = task.Status,
+            //        PZNo = task.PZNo,
+            //        Qty = task.Qty,
+
+            //        Type = plc.Type
+            //    })
+            //    .FirstAsync();
+            ////涓嬪彂鍒嗘嫞浠诲姟
+            //HubUtil.PublicCheckTask(order.Adapt<Service.WcsDevice.Dto.WcsDeviceTaskOrderDto>());
+
             #endregion                      
         }  
     }
diff --git a/Web/src/views/device/sortPallet/index.vue b/Web/src/views/device/sortPallet/index.vue
index 1a8c905..d73c05a 100644
--- a/Web/src/views/device/sortPallet/index.vue
+++ b/Web/src/views/device/sortPallet/index.vue
@@ -109,10 +109,25 @@
 </template>
   
 <script lang="ts" setup>
-import { ref } from 'vue';
+import { ref, onMounted  } from 'vue';
 import { GetWcsPackPlcList,GetWcsPackStationPlcList,BindTaskForPLC,CloseTaskForPLC } from '/@/api/wcs/wcsDevice';
 import { pageWcsOderTask } from '/@/api/device/wcsOderTask';
 import { ElMessageBox,ElMessage } from 'element-plus';
+import { signalR,stopConnection } from './signalR';
+//杩炴帴signalR 鐩戝惉鍙樻洿
+onMounted(async () => {
+    signalR.off('PublicCheckTask');
+    signalR.on('PublicCheckTask', (data: any) => {
+        //todo 闇�瑕佹祴璇�
+        // if (data.type == 0) {
+            
+        // }
+        var index = devicePointData.value.findIndex(s => s.id == data.id);
+        if (index !== -1) {
+            devicePointData.value.splice(index, 1, data);
+        }
+    });
+});
 
 //璁惧鏁版嵁
 const deviceList=ref<any>([]);
diff --git a/Web/src/views/device/sortPallet/signalR.ts b/Web/src/views/device/sortPallet/signalR.ts
new file mode 100644
index 0000000..d9b25f2
--- /dev/null
+++ b/Web/src/views/device/sortPallet/signalR.ts
@@ -0,0 +1,45 @@
+import * as SignalR from '@microsoft/signalr';
+import { getToken } from '/@/utils/axios-utils';
+
+// 鍒濆鍖朣ignalR瀵硅薄
+const connection = new SignalR.HubConnectionBuilder()
+	.configureLogging(SignalR.LogLevel.Information)
+	.withUrl(`${window.__env__.VITE_API_URL}/hubs/CheckTask?token=${getToken()}`, { transport: SignalR.HttpTransportType.WebSockets, skipNegotiation: true })
+	.withAutomaticReconnect({
+		nextRetryDelayInMilliseconds: () => {
+			return 5000; // 姣�5绉掗噸杩炰竴娆�
+		},
+	})
+	.build();
+
+connection.keepAliveIntervalInMilliseconds = 15 * 1000; // 蹇冭烦妫�娴�15s
+connection.serverTimeoutInMilliseconds = 30 * 60 * 1000; // 瓒呮椂鏃堕棿30m
+
+// 鍚姩杩炴帴
+connection.start().then(() => {
+	console.log('鍚姩杩炴帴checkTask');
+});
+// 鏂紑杩炴帴
+connection.onclose(async () => {
+	console.log('鏂紑杩炴帴checkTask');
+});
+// 閲嶈繛涓�
+connection.onreconnecting(() => {
+	console.log('鏈嶅姟鍣ㄥ凡鏂嚎checkTask');
+});
+// 閲嶈繛鎴愬姛
+connection.onreconnected(() => {
+	console.log('閲嶈繛鎴愬姛checkTask');
+});
+// 鍏抽棴杩炴帴鐨勬柟娉�
+async function stopConnection() {
+	try {
+	  await connection.stop();
+	  console.log('杩炴帴宸插叧闂�');
+	} catch (error) {
+	  console.error('鍏抽棴杩炴帴鏃跺彂鐢熼敊璇�:', error);
+	}
+  }
+// connection.on('PublicPlcConn', () => {});
+
+export { connection as signalR,stopConnection };

--
Gitblit v1.8.0