From c56d28d684cee010f291295dbe851bab64c1b6a6 Mon Sep 17 00:00:00 2001
From: hwh <332078369@qq.com>
Date: 星期二, 03 九月 2024 09:52:22 +0800
Subject: [PATCH] 设备监控绑定plc数据

---
 Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs |  158 ++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 138 insertions(+), 20 deletions(-)

diff --git a/Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs b/Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs
index 5d2c9ca..8a5e853 100644
--- a/Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs
+++ b/Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs
@@ -1,4 +1,7 @@
 锘�
+using Admin.NET.Core.Service;
+using Elastic.Clients.Elasticsearch;
+
 namespace WCS.Application;
 
 /// <summary>
@@ -8,9 +11,11 @@
 public class WcsDeviceService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<WcsDevice> _wcsDeviceRep;
-    public WcsDeviceService(SqlSugarRepository<WcsDevice> wcsDeviceRep)
+    private readonly SysCacheService _sysCacheService;
+    public WcsDeviceService(SqlSugarRepository<WcsDevice> wcsDeviceRep, SysCacheService sysCacheService)
     {
         _wcsDeviceRep = wcsDeviceRep;
+        _sysCacheService = sysCacheService;
     }
 
     /// <summary>
@@ -28,19 +33,20 @@
             input.Field = "u.Id";
             input.Order = "desc";
         }
-		input.SearchKey = input.SearchKey?.Trim();
+        input.SearchKey = input.SearchKey?.Trim();
         var query = _wcsDeviceRep.AsQueryable()
             .WhereIF(!string.IsNullOrEmpty(input.SearchKey), u =>
                 u.Text.Contains(input.SearchKey)
             )
-            .WhereIF(input.PlcId>0, u => u.PlcId == input.PlcId)
+            .WhereIF(input.PlcId > 0, u => u.PlcId == input.PlcId)
             .WhereIF(!string.IsNullOrWhiteSpace(input.Text), u => u.Text.Contains(input.Text.Trim()))
             //澶勭悊澶栭敭鍜孴reeSelector鐩稿叧瀛楁鐨勮繛鎺�
-            .LeftJoin<WcsPlc>((u, plcid) => u.PlcId == plcid.Id )
+            .LeftJoin<WcsPlc>((u, plcid) => u.PlcId == plcid.Id)
             .Select((u, plcid) => new WcsDeviceOutput
             {
                 Id = u.Id,
-                PlcId = u.PlcId, 
+                PlcId = u.PlcId,
+                DeviceType = (DeviceTypeEnum)u.DeviceType,
                 PlcIdIP = plcid.IP,
                 Level = (DeviceLevelEnum)u.Level,
                 DbNumber = u.DbNumber,
@@ -60,7 +66,7 @@
                 CreateOrgName = u.CreateOrgName,
                 IsDelete = u.IsDelete,
             });
-		return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
+        return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
     }
 
     /// <summary>
@@ -121,19 +127,6 @@
     }
 
     /// <summary>
-    /// 鑾峰彇璁惧淇℃伅鍒楄〃
-    /// </summary>
-    /// <param name="input"></param>
-    /// <returns></returns>
-    [HttpGet]
-    [ApiDescriptionSettings(Name = "List")]
-    [DisplayName("鑾峰彇璁惧淇℃伅鍒楄〃")]
-    public async Task<List<WcsDeviceOutput>> List([FromQuery] PageWcsDeviceInput input)
-    {
-        return await _wcsDeviceRep.AsQueryable().Select<WcsDeviceOutput>().ToListAsync();
-    }
-
-    /// <summary>
     /// 鑾峰彇PlcId鍒楄〃
     /// </summary>
     /// <returns></returns>
@@ -144,13 +137,138 @@
         return await _wcsDeviceRep.Context.Queryable<WcsPlc>()
                 .Select(u => new
                 {
-                    Label = u.IP,
+                    Label = u.Text,
                     Value = u.Id
                 }
                 ).ToListAsync();
     }
 
+    /// <summary>
+    /// 鐢熸垚鐐逛綅
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "GeneratePos")]
+    [DisplayName("鐢熸垚鐐逛綅")]
+    public async Task GeneratePos(GeneratePosInput input)
+    {
+        var modDevice = await _wcsDeviceRep.GetByIdAsync(input.Id);
 
+        var listPosition = new List<WcsPosition>();
+        listPosition.Add(new WcsPosition()
+        {
+            DeviceId = modDevice.Id,
+            StationNum = modDevice.StationNum,
+            PlcPos = input.Pos.ToString(),
+            PosType = PLCDataTypeEnum.String,
+            Text = "TaskNo"
+        });
+        listPosition.Add(new WcsPosition()
+        {
+            DeviceId = modDevice.Id,
+            StationNum = modDevice.StationNum,
+            PlcPos = (input.Pos + 4).ToString(),
+            PosType = PLCDataTypeEnum.UShort,
+            Text = "TaskType"
+        });
+        listPosition.Add(new WcsPosition()
+        {
+            DeviceId = modDevice.Id,
+            StationNum = modDevice.StationNum,
+            PlcPos = (input.Pos + 6).ToString(),
+            PosType = PLCDataTypeEnum.UShort,
+            Text = "StartLocatNo"
+        });
+        listPosition.Add(new WcsPosition()
+        {
+            DeviceId = modDevice.Id,
+            StationNum = modDevice.StationNum,
+            PlcPos = (input.Pos + 8).ToString(),
+            PosType = PLCDataTypeEnum.UShort,
+            Text = "EndLocatNo"
+        });
 
+        await _wcsDeviceRep.Context.Insertable(listPosition).ExecuteCommandAsync();
+    }
 
+    /// <summary>
+    /// 鑾峰彇璁惧淇℃伅鍒楄〃
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpGet]
+    [ApiDescriptionSettings(Name = "List")]
+    [DisplayName("鑾峰彇璁惧淇℃伅鍒楄〃")]
+    public async Task<List<WcsDeviceOutput>> List([FromQuery] PageWcsDeviceInput input)
+    {
+        var list = await _wcsDeviceRep.AsQueryable()
+                                    .LeftJoin<WcsPlc>((a, b) => a.PlcId == b.Id)
+                                    .Where((a, b) => a.DeviceType == DeviceTypeEnum.Business)
+                                    .Select<WcsDeviceOutput>((a, b) => new WcsDeviceOutput() { Type = b.Type }, true)
+                                    .ToListAsync();
+        //鑾峰彇璺烘満鐨勭姸鎬�
+        foreach (var modDevice in list)
+        {
+            if (_sysCacheService.ExistKey("PLCCONN" + modDevice.PlcId))
+            {
+                var cachePlc = _sysCacheService.Get<WcsPlc>("PLCCONN" + modDevice.PlcId);
+                modDevice.Status = cachePlc.IsConn;
+                if (modDevice.Status)
+                {
+                    //璇诲彇plc鐨勫��
+                    var modConn = PLCTaskAction.listPlcConn.FirstOrDefault(s => s != null && s.PlcId == modDevice.PlcId);
+                    if (modConn == null)
+                        break;
+                    try
+                    {
+                        var listPosition = await _wcsDeviceRep.Context.Queryable<WcsPosition>().Where(s => s.DeviceId == modDevice.Id).ToListAsync();
+                        (var result, var plc) = modConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.PlcPos);
+                        modDevice.Plc = Convert.ToString(plc);
+                        (result, var wcs) = modConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos);
+                        modDevice.Wcs = Convert.ToString(wcs);
+                        //浠诲姟鍙�
+                        var modPositionTask = listPosition.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
+                        (result, var taskNo) = modConn.GetPlcDBValue(modPositionTask.PosType, modDevice.DbNumber, modPositionTask.PlcPos);
+                        modDevice.TaskNo = Convert.ToString(taskNo);
+                        //浠诲姟绫诲瀷
+                        var modPositionTaskType = listPosition.FirstOrDefault(s => s.Text == "浠诲姟绫诲瀷");
+                        (result, var taskType) = modConn.GetPlcDBValue(modPositionTaskType.PosType, modDevice.DbNumber, modPositionTaskType.PlcPos);
+                        modDevice.TaskType = (TaskTypeEnum)Convert.ToInt32(taskType);
+                        //璧峰宸ヤ綅
+                        var modPositionStartLocatNo = listPosition.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅");
+                        (result, var startLocatNo) = modConn.GetPlcDBValue(modPositionStartLocatNo.PosType, modDevice.DbNumber, modPositionStartLocatNo.PlcPos);
+                        modDevice.StartLocatNo = Convert.ToString(startLocatNo);
+                        //鐩殑宸ヤ綅
+                        var modPositionEndLocatNo = listPosition.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅");
+                        (result, var endLocatNo) = modConn.GetPlcDBValue(modPositionEndLocatNo.PosType, modDevice.DbNumber, modPositionEndLocatNo.PlcPos);
+                        modDevice.EndLocatNo = Convert.ToString(endLocatNo);
+                        //鎵樼洏鐮�
+                        var modPositionPalletNo = listPosition.FirstOrDefault(s => s.Text == "鎵樼洏鐮�");
+                        (result, var palletNo) = modConn.GetPlcDBValue(modPositionPalletNo.PosType, modDevice.DbNumber, modPositionPalletNo.PlcPos);
+                        modDevice.PalletNo = Convert.ToString(palletNo);
+                    }
+                    catch (Exception)
+                    {
+
+                    }
+                }
+            }
+            else
+            {
+                modDevice.Status = false;
+            }
+
+            //modDevice.TaskNo = "TK00001";
+            //modDevice.TaskType = TaskTypeEnum.In;
+            //modDevice.PalletNo = "2024209032";
+            //modDevice.StartLocatNo = "010101";
+            //modDevice.EndLocatNo = "020202";
+            //modDevice.Wcs = new Random().Next(100).ToString();
+            //modDevice.Plc = new Random().Next(100).ToString();
+            //modDevice.Status = true;
+        }
+
+        return list;
+    }
 }

--
Gitblit v1.8.0