From 3e9a6a06132b06b8c2568f900df936ccc654bd58 Mon Sep 17 00:00:00 2001
From: chengsc <11752@DESKTOP-DS49RCP>
Date: 星期二, 29 四月 2025 14:09:20 +0800
Subject: [PATCH] 修改问题,添加四向车车充电流程

---
 Admin.NET/WCS.Application/PLC/PLCService.cs      |  148 ++++++++++++++++++++++++++---
 Admin.NET/WCS.Application/Entity/WcsTask.cs      |    2 
 Admin.NET/WCS.Application/Entity/WCSCarTime.cs   |   28 +++++
 Admin.NET/WCS.Application/PLC/PLCTaskAction.cs   |   25 ++++
 Admin.NET/WCS.Application/Enum/FourWayCarEnum.cs |   87 +++++++++++++++++
 5 files changed, 270 insertions(+), 20 deletions(-)

diff --git a/Admin.NET/WCS.Application/Entity/WCSCarTime.cs b/Admin.NET/WCS.Application/Entity/WCSCarTime.cs
new file mode 100644
index 0000000..2b72486
--- /dev/null
+++ b/Admin.NET/WCS.Application/Entity/WCSCarTime.cs
@@ -0,0 +1,28 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using static SKIT.FlurlHttpClient.Wechat.TenpayV3.Models.CreateMarketingMemberCardActivityRequest.Types.AwardSendPeriod.Types.AwardSendDayTime.Types;
+
+namespace WCS.Application.Entity;
+/// <summary>
+/// 鍥涘悜杞︾┖闂叉椂闂磋〃
+/// </summary>
+[SugarTable("WCSCarTime", "鍥涘悜杞︾┖闂叉椂闂磋〃")]
+public class WcsCarTime : EntityBaseData
+{ 
+
+    /// <summary>
+    /// 灏忚溅IP
+    /// </summary>
+    [SugarColumn(ColumnName = "CarIp", ColumnDescription = "灏忚溅IP")]
+    public string? CarIp { get; set; }
+
+    /// <summary>
+    /// 灏忚溅绌洪棽鏃堕棿
+    /// </summary>
+    [SugarColumn(ColumnName = "CarTime", ColumnDescription = "灏忚溅绌洪棽鏃堕棿")]
+    public DateTime? CarTime { get; set; }
+
+}
diff --git a/Admin.NET/WCS.Application/Entity/WcsTask.cs b/Admin.NET/WCS.Application/Entity/WcsTask.cs
index b0d06aa..3482a07 100644
--- a/Admin.NET/WCS.Application/Entity/WcsTask.cs
+++ b/Admin.NET/WCS.Application/Entity/WcsTask.cs
@@ -165,7 +165,7 @@
     public string? WcsPosValue { get; set; }
     
     /// <summary>
-    /// 浼樺厛绾�
+    /// 浼樺厛绾� 鍥涘悜杞� 灏忚溅鍏呯數888 鍏朵粬浠诲姟999
     /// </summary>
     [SugarColumn(ColumnName = "Levels", ColumnDescription = "浼樺厛绾�")]
     public int? Levels { get; set; }
diff --git a/Admin.NET/WCS.Application/Enum/FourWayCarEnum.cs b/Admin.NET/WCS.Application/Enum/FourWayCarEnum.cs
new file mode 100644
index 0000000..5a0b3ce
--- /dev/null
+++ b/Admin.NET/WCS.Application/Enum/FourWayCarEnum.cs
@@ -0,0 +1,87 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WCS.Application;
+
+/// <summary>
+/// 鍥涘悜杞﹀嚭鍏ュ簱鍙d綅缃灇涓�
+/// </summary>
+[Description("鍥涘悜杞﹀嚭鍏ュ簱鍙d綅缃灇涓�")]
+public enum FourWayCarEnum
+{
+    /// <summary>
+    /// 瀵嗛泦搴�1灞傚崡宸�
+    /// </summary>
+    [Description("瀵嗛泦搴�1灞傚崡宸�")]
+    A1 = 13,
+    /// <summary>
+    /// 瀵嗛泦搴�1灞傚崡鍙�
+    /// </summary>
+    [Description("瀵嗛泦搴�1灞傚崡鍙�")]
+    A2 = 13,
+    /// <summary>
+    /// 瀵嗛泦搴�2灞傚崡宸�
+    /// </summary>
+    [Description("瀵嗛泦搴�2灞傚崡宸�")]
+    A3 = 14,
+    /// <summary>
+    /// 瀵嗛泦搴�2灞傚崡鍙�
+    /// </summary>
+    [Description("瀵嗛泦搴�2灞傚崡鍙�")]
+    A4 = 15,
+
+    /// <summary>
+    /// 瀵嗛泦搴�1灞傚寳宸�
+    /// </summary>
+    [Description("瀵嗛泦搴�1灞傚寳宸�")]
+    B1,
+    /// <summary>
+    /// 瀵嗛泦搴�1灞傚寳涓�
+    /// </summary>
+    [Description("瀵嗛泦搴�1灞傚寳涓�")]
+    B2,
+    /// <summary>
+    /// 瀵嗛泦搴�1灞傚寳鍙�
+    /// </summary>
+    [Description("瀵嗛泦搴�1灞傚寳鍙�")]
+    B3,
+    /// <summary>
+    /// 瀵嗛泦搴�2灞傚寳宸�
+    /// </summary>
+    [Description("瀵嗛泦搴�2灞傚寳宸�")]
+    B4,
+    /// <summary>
+    /// 瀵嗛泦搴�2灞傚寳涓�
+    /// </summary>
+    [Description("瀵嗛泦搴�2灞傚寳涓�")]
+    B5,
+    /// <summary>
+    /// 瀵嗛泦搴�2灞傚寳鍙�
+    /// </summary>
+    [Description("瀵嗛泦搴�2灞傚寳鍙�")]
+    B6,
+}
+
+
+/// <summary>
+/// 鍥涘悜杞︾數閲忓�兼灇涓�
+/// </summary>
+[Description("鍥涘悜杞︾數閲忓�兼灇涓�")]
+public enum FourWayCarDLEnum
+{
+    /// <summary>
+    /// 鏋侀檺鐢甸噺 浣庝簬姝ょ數閲忎笉鎵ц浠诲姟
+    /// </summary>
+    [Description("鏋侀檺鐢甸噺")]
+    Dl = 30,
+    /// <summary>
+    /// 鍋ュ悍鐢甸噺 浣庝簬姝ょ數閲� 涓旀棤浠诲姟鏃跺幓鍏呯數
+    /// </summary>
+    [Description("鍋ュ悍鐢甸噺")]
+    Dl2 = 80,
+     
+ 
+}
diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs
index 371e13a..a25f1e5 100644
--- a/Admin.NET/WCS.Application/PLC/PLCService.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -6,6 +6,7 @@
 using Furion.Logging;
 using IoTClient;
 using NewLife.Reflection;
+using SixLabors.ImageSharp.ColorSpaces;
 using WCS.Application.Entity;
 using WCS.Application.Util;
 
@@ -171,8 +172,8 @@
                         var carTask = _db.Queryable<WcsCarTasks>().First(m=>m.IsDelete == false && m.Status == TaskStatusEnum.Doing && m.CarTaskNo == valueTaskStr && m.CarNo == modDevice.PlcIdIP);
                         if (carTask == null)
                         {
-                            var modRests = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅");
-                            plcConn.SetDBValue(modRests.PosType, modRests.PlcPos, "1");//娌℃湁鎵惧埌浠诲姟  澶嶄綅
+                            //var modRests = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅");
+                            //plcConn.SetDBValue(modRests.PosType, modRests.PlcPos, "1");//娌℃湁鎵惧埌浠诲姟  澶嶄綅
                             return;
                         }
                          
@@ -207,6 +208,14 @@
                             modFinshTask.FinishDate = DateTime.Now;
                             _db.Updateable(modFinshTask).ExecuteCommand();
                             
+                            //鍒ゆ柇浠诲姟鏄惁鍏呯數浠诲姟,涓嬪彂寮�濮嬪厖鐢靛懡浠�
+                            if (modFinshTask.Levels == 888)
+                            {
+                                //鍐欏叆寮�濮嬪厖鐢�
+                                var modCd = modDevice.listStation.FirstOrDefault(s => s.Text == "鍏呯數鍛戒护");
+                                plcConn.SetDBValue(modCd.PosType, modCd.PlcPos.ToString(), "2");
+                            }
+
                             //鍙嶉WMS绯荤粺 浠诲姟瀹屾垚
                             //HttpService httpService = new HttpService();
                             //var requestMode = new TaskRequestWMS()
@@ -225,14 +234,6 @@
                         
                     }
                     
-                    var modStationX = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(X)");
-                    var (resultx, valuex) = plcConn.GetDBValue(modStationX.PosType, modStationX.PlcPos);
-                    var modStationY = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(Y)");
-                    var (resulty, valuey) = plcConn.GetDBValue(modStationY.PosType, modStationY.PlcPos);
-                    var modStationZ = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(Z)");
-                    var (resultz, valuez) = plcConn.GetDBValue(modStationZ.PosType, modStationZ.PlcPos);
-
-                    
                     WcsTask modTask;
                     //瑕佷笅鍙戣矾寰�2浠诲姟
                     if (carTaskNext != null)
@@ -245,17 +246,122 @@
                     {
                         // 鑾峰彇浠诲姟淇℃伅
                         modTask = _db.Queryable<WcsTask>().Where(s => s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.CarIp == modDevice.PlcIdIP).OrderBy(m => m.Levels).OrderBy(m => m.CreateTime).First();
-                        if (modTask == null)
+                        if (modTask != null)
                         {
-                            return;
+                            carTaskNext = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == modTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status == TaskStatusEnum.Wait).OrderBy(m => m.CreateTime).First();
                         }
-                        carTaskNext = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == modTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status == TaskStatusEnum.Wait).OrderBy(m => m.CreateTime).First();
                     }
 
-                    //return;
+                    //璇诲彇灏忚溅浣嶇疆
+                    var modStationX = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(X)");
+                    var (resultx, valuex) = plcConn.GetDBValue(modStationX.PosType, modStationX.PlcPos);
+                    var modStationY = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(Y)");
+                    var (resulty, valuey) = plcConn.GetDBValue(modStationY.PosType, modStationY.PlcPos);
+                    var modStationZ = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(Z)");
+                    var (resultz, valuez) = plcConn.GetDBValue(modStationZ.PosType, modStationZ.PlcPos);
+                    var carXYZ = valuex.ToString().PadLeft(2, '0') + valuey.ToString().PadLeft(2, '0') + valuez.ToString().PadLeft(2, '0');
                     if (modTask == null || carTaskNext == null)
                     {
-                        //鍒ゆ柇灏忚溅鏄惁鏈夌┖闂叉椂闂磋褰� 娌℃湁锛氭坊鍔�  鏈夛細鍒ゆ柇褰撳墠鏃堕棿涓庤褰曟椂闂存槸鍚︽弧瓒�5鍒嗛挓 婊¤冻锛氭坊鍔犺灏忚溅鍘诲厖鐢典换鍔�
+                        //璇诲彇灏忚溅鐢甸噺
+                        var modPosCarDl = modDevice.listStation.FirstOrDefault(s => s.Text == "鐢垫睜鐢甸噺");
+                        var (resultDl, valueDl) = plcConn.GetDBValue(modPosCarDl.PosType, modPosCarDl.PlcPos);
+                        if (resultDl.IsSucceed && valueDl < FourWayCarDLEnum.Dl)
+                        {
+                            var endLocateCar = "";
+                            if (valuez == 1)
+                            {
+                                endLocateCar = "210401";
+                            }
+                            else if (valuez == 2)
+                            {
+                                endLocateCar = "210402"; //011202
+                            }
+                            else
+                            {
+                                return; // 灞傛暟閿欒
+                            }
+                            //娣诲姞灏忚溅鍏呯數浣嶇疆
+                            WcsTask modCarTask = new WcsTask()
+                            {
+                                TaskNo = _taskService.GetTaskCode(),
+                                TaskType = TaskTypeEnum.Move,
+                                Type = PLCTypeEnum.ShuttleCar,
+                                StartLocate = carXYZ,
+                                EndLocate = endLocateCar,
+                                PalletNo = "",
+                                Status = TaskStatusEnum.Wait,
+                                Levels = 888, //鍏呯數绛夌骇浼樺厛浠诲姟绛夌骇
+                                Origin = "WCS",
+                                CarIp = modDevice.PlcIdIP
+                            };
+                            _db.Insertable(modCarTask).ExecuteCommand();
+                            HubUtil.PublicTask(modCarTask.Adapt<WcsTaskOutput>());
+                        }
+                        else if(resultDl.IsSucceed && valueDl < FourWayCarDLEnum.Dl2)
+                        {
+                            //鍒ゆ柇灏忚溅鏄惁鏈夌┖闂叉椂闂磋褰� 娌℃湁锛氭坊鍔�  鏈夛細鍒ゆ柇褰撳墠鏃堕棿涓庤褰曟椂闂存槸鍚︽弧瓒�5鍒嗛挓 婊¤冻锛氭坊鍔犺灏忚溅鍘诲厖鐢典换鍔�
+                            var carTime = _db.Queryable<WcsCarTime>().First(m => m.IsDelete == false && m.CarIp == modDevice.PlcIdIP);
+                            if (carTime == null)
+                            {
+                                var carTimeAdd = new WcsCarTime()
+                                {
+                                    CarIp = modDevice.PlcIdIP,
+                                    CarTime = DateTime.Now
+                                };
+                                _db.Insertable(carTimeAdd).ExecuteCommand();
+                            }
+                            else
+                            {
+                                if (carTime.CarTime == null)
+                                {
+                                    carTime.CarTime = DateTime.Now;
+                                    carTime.UpdateTime = DateTime.Now;
+                                    _db.Updateable(carTime).ExecuteCommand();
+                                }
+                                else
+                                {
+                                    var date1 = DateTime.Now;
+                                    var data2 = (DateTime)carTime.CarTime;
+                                    TimeSpan interval = date1 - data2;
+                                    if (interval.TotalMinutes >= 5)
+                                    {
+                                        var endLocateCar = "";
+                                        if (valuez == 1)
+                                        {
+                                            endLocateCar = "011201";
+                                        }
+                                        else if (valuez == 2)
+                                        {
+                                            endLocateCar = "011202";
+                                        }
+                                        else
+                                        {
+                                            return; // 灞傛暟閿欒
+                                        }
+                                        //娣诲姞灏忚溅鍏呯數浣嶇疆
+                                        WcsTask modCarTask = new WcsTask()
+                                        {
+                                            TaskNo = _taskService.GetTaskCode(),
+                                            TaskType = TaskTypeEnum.Move,
+                                            Type = PLCTypeEnum.ShuttleCar,
+                                            StartLocate = carXYZ,
+                                            EndLocate = endLocateCar,
+                                            PalletNo = "",
+                                            Status = TaskStatusEnum.Wait,
+                                            Levels = 888, //鍏呯數绛夌骇浼樺厛浠诲姟绛夌骇
+                                            Origin = "WCS",
+                                            CarIp = modDevice.PlcIdIP
+                                        };
+                                        _db.Insertable(modCarTask).ExecuteCommand();
+                                        HubUtil.PublicTask(modCarTask.Adapt<WcsTaskOutput>());
+                                    }
+                                }
+
+
+                            }
+                        }
+                         
+                        
                         return;
                     }
                     
@@ -264,6 +370,7 @@
                         Thread.Sleep(3000);
                         return;
                     }
+                    
                     //鍒ゆ柇褰撳墠浠诲姟鏄惁杩樻湁鍓嶇疆浠诲姟鏈畬鎴�
                     var preStrs = carTaskNext.PreId.Split(';');
                     foreach (var preStr in preStrs)
@@ -279,6 +386,7 @@
                             return;//鍓嶇疆浠诲姟鏈畬鎴�
                         }
                     }
+
                     //鍏堝浣�
                     var modRest = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅");
                     plcConn.SetDBValue(modRest.PosType, modRest.PlcPos, "1");
@@ -286,7 +394,15 @@
                     List<Result> listResult = new List<Result>();
                     //鑾峰彇灏忚溅浠诲姟鍙�
                     var carTaskNo = FourWayCarUtil.GetTaskNo();
-                    
+
+                    //鍒ゆ柇浠诲姟鏄惁鍏呯數浠诲姟
+                    if (modTask.Levels == 888)
+                    {
+                        //鍐欏叆鍏呯數鍛戒护
+                        var modCd = modDevice.listStation.FirstOrDefault(s => s.Text == "鍏呯數鍛戒护");
+                        listResult.Add(plcConn.SetDBValue(modCd.PosType, modCd.PlcPos.ToString(), "1"));
+                    }
+
                     var modWriteTask = modDevice.listStation.FirstOrDefault(s => s.Text == "鍐欏叆浠诲姟鍙�");
                     listResult.Add(plcConn.SetDBValue(modWriteTask.PosType, modWriteTask.PlcPos, carTaskNo.ToString()));
 
diff --git a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
index 18c7c4b..08712ca 100644
--- a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
+++ b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
@@ -9,6 +9,7 @@
 using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;
 using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
 using OnceMi.AspNetCore.OSS;
+using Qiniu.Storage;
 using System;
 using System.Drawing.Drawing2D;
 using System.Net.NetworkInformation;
@@ -377,7 +378,7 @@
                 try
                 {
                     // 鑾峰彇瀵嗛泦搴撴湭鎵ц浠诲姟 鏍规嵁鍒涘缓鏃堕棿鎺掑簭
-                    var waitTask = _db.Queryable<WcsTask>().Where(s => s.IsDelete == false && s.Status == TaskStatusEnum.Wait && s.Type == PLCTypeEnum.ShuttleCar).OrderBy(s => s.CreateTime).First();
+                    var waitTask = _db.Queryable<WcsTask>().Where(s => s.IsDelete == false && s.Status == TaskStatusEnum.Wait && s.Type == PLCTypeEnum.ShuttleCar).OrderBy(s => new {s.Levels, s.CreateTime}).First();
                     if (waitTask == null)
                     {
                         continue;
@@ -386,7 +387,7 @@
                     var taskpai = int.Parse(waitTask.StartLocate.Substring(0, 2));
                     var tasklie = int.Parse(waitTask.StartLocate.Substring(2, 2));
                     var taskceng = int.Parse(waitTask.StartLocate.Substring(4, 2));
-
+                    
                     #region 鑾峰彇褰撳墠浠诲姟鎵�鍦ㄥ眰鎵�鏈夌┖闂插皬杞�
 
                     // 鑾峰彇鏈変换鍔$殑灏忚溅缂栧彿
@@ -412,6 +413,19 @@
                             {
                                 //鑾峰彇宸ヤ綅WCSPLCPosition淇℃伅
                                 var plcPosition = listPlcPosition.Where(s => s.DeviceId == modDevice.Id).ToList();
+                                if (value == 3)
+                                {
+                                    var modCarDl = plcPosition.FirstOrDefault(s => s.Text == "鐢垫睜鐢甸噺");
+                                    var (resultDl, valueDl) = modbusUtil.GetDBValue(modCarDl.PosType, modCarDl.PlcPos);
+                                    if (resultDl.IsSucceed && valueDl> FourWayCarDLEnum.Dl) 
+                                    {
+                                        //鍐欏叆缁撴潫鍏呯數鍛戒护
+                                        var modCdEnd = plcPosition.FirstOrDefault(s => s.Text == "鍏呯數鍛戒护");
+                                        modbusUtil.SetDBValue(modCdEnd.PosType, modCdEnd.PlcPos.ToString(), "2") ;
+                                        carErr = true;
+                                        break; //鏆傜紦鍒嗛厤锛岄槻姝㈠悓灞傚皬杞﹀叧鏈烘垨澶辫仈瀵艰嚧闃绘尅璺緞
+                                    }
+                                }
                                 //灏忚溅绌洪棽鍔犲叆闆嗗悎
                                 if (value == 1)
                                 {
@@ -490,8 +504,13 @@
                             }
                         }
                     }
+                    var typeStr = "1";
+                    if (waitTask.Levels  == 888 )
+                    {
+                        typeStr = "0";//灏忚溅浠诲姟鏄厖鐢典换鍔�
+                    }
                     //鑾峰彇灏忚溅鍘绘斁璐у偍浣嶄换鍔¤矾寰�
-                    var data2 = FourWayCarUtil.GetCarPath(waitTask.StartLocate, waitTask.EndLocate, "1");
+                    var data2 = FourWayCarUtil.GetCarPath(waitTask.StartLocate, waitTask.EndLocate, typeStr);
                     var datas2 = FourWayCarUtil.GetCarPathUp(data2, 1);
                     
                     if (datas2 == null) 

--
Gitblit v1.8.0