Bläddra i källkod

全自动化测试

yc_t 7 år sedan
förälder
incheckning
950a58c6b8

+ 1 - 1
parkMonitor/App.config

@@ -10,7 +10,7 @@
     <Equipment key="Core" value="parkMonitor.server.CoreThread.CoreThreadTest2" />
     <Equipment key="Monitor" value="parkMonitor.server.MonitorServer" />
     <Equipment key="PLC" value="parkMonitor.server.PLCLinker" />
-    <Equipment key="Num" value="parkMonitor.server.NumMachineLinker" />
+    <Equipment key="Num" value="parkMonitor.server.NumMachineSimul" />
     <Equipment key="Web" value="parkMonitor.server.WebThread.CentralForWeb" />
     <Equipment key="Queue" value="parkMonitor.server.CoreThread.QueuingThread" />
   </Equipments>

+ 6 - 6
parkMonitor/entity/AbstractMessage.cs

@@ -90,7 +90,7 @@ namespace parkMonitor.entity
     {
         public List<PLCNode> extendedPlcList { get; set; }
         public List<PLCNode> originalPlcList { get; set; }
-        public List<LaserMessage> laserMsgList { get; set;}
+        public List<LaserMessage> laserMsgList { get; set; }
 
         public PLCMessage()
         {
@@ -155,12 +155,12 @@ namespace parkMonitor.entity
         }
         public override bool Equals(object obj)
         {
-            if (this == obj)
-                return true;
             if (obj == null || obj.GetType() != this.GetType())
                 return false;
-            NumberMachineNode l = obj as NumberMachineNode;
-            return (LicenseNum.Equals(l.LicenseNum));
+            if (this == obj)
+                return true;
+            NumberMachineNode l = (NumberMachineNode)obj;
+            return (l.LicenseNum == LicenseNum);
         }
         public override int GetHashCode()
         {
@@ -197,7 +197,7 @@ namespace parkMonitor.entity
             if (obj == null || obj.GetType() != this.GetType())
                 return false;
             NumberMachineMessage n = obj as NumberMachineMessage;
-            return (data.Equals(n));
+            return (data.Equals(n.data));
         }
         public override int GetHashCode()
         {

+ 0 - 1
parkMonitor/manualParking/ManualParking.cs

@@ -102,7 +102,6 @@ namespace parkMonitor.manualParking
                     MessageBox.Show("电话号码或号牌错误");
                 }
             }
-
         }
     }
 }

+ 157 - 0
parkMonitor/manualParking/ManualParkingSimul.cs

@@ -0,0 +1,157 @@
+using parkMonitor.DBLocation;
+using parkMonitor.entity;
+using parkMonitor.model;
+using parkMonitor.server.uiLogServer;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace parkMonitor
+{
+    public class ManualParkingSimul
+    {
+        public static ManualParkingSimul ins;
+        private const string userId = "18202736439";
+        private const string garageId = "1";
+        private const string header = "鄂A";
+        private const int licInterval = 90000;//90秒
+        private Random rnd;
+        private Dictionary<int, CarStatusStru> numStatusMap = new Dictionary<int, CarStatusStru>();
+        Command storeCmd = new Command();
+        IEquipments queue;
+        DBLocationOperator locationOper = new DBLocationOperator();
+
+        public ManualParkingSimul()
+        {
+            Task.Factory.StartNew(() =>
+            {
+                for (int i = 0; i < 10; i++)
+                {
+                    numStatusMap.Add(i, new CarStatusStru(header + (i * 11111).ToString("D5"), 0));
+                }
+                while (queue == null)
+                {
+                    queue = EquipmentSimpleFactory.ins.FindEquipment(EquipmentName.Queue);
+                }
+            }).Wait();
+            Task.Factory.StartNew(() =>
+            {
+                Run();
+            });
+        }
+
+        public void Store(string lic)
+        {
+            storeCmd.manual = true;
+            storeCmd.commandType = 's';
+            storeCmd.userID = locationOper.GetUserID(userId).ToString();
+            storeCmd.LicenseNum = lic;
+            try
+            {
+                storeCmd.garageID = Convert.ToInt32(garageId);
+            }
+            catch { UILogServer.ins.error("非法车库号,请重新输入"); return; }
+            int garageFreeSpace = 0;
+            bool isTelRegister = locationOper.IsTelRegister(userId);
+            if (isTelRegister == false)
+            {
+                UILogServer.ins.error("该号码未被注册,请先注册");
+            }
+            else if (storeCmd.garageID != 0)
+            {
+                garageFreeSpace = locationOper.getGarageFreeSpace(storeCmd.garageID);
+                if (garageFreeSpace > 0)
+                {
+                    if (storeCmd.userID != "" && storeCmd.LicenseNum != "")
+                    {
+                        queue.SetMessage((Command)storeCmd.Clone());
+                        UILogServer.ins.info("发送成功");
+                    }
+                }
+                else
+                {
+                    UILogServer.ins.error("该车库没有剩余车位");
+                }
+            }
+        }
+
+        public void Fetch(string lic)
+        {
+            storeCmd.manual = true;
+            storeCmd.commandType = 'f';
+            storeCmd.userID = locationOper.GetUserID(userId).ToString();
+            storeCmd.LicenseNum = lic;
+            storeCmd.TimeRecord = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+            try
+            {
+                storeCmd.garageID = Convert.ToInt32(garageId);
+            }
+            catch { UILogServer.ins.error("非法车库号,请重新输入"); return; }
+            bool isTelRegister = locationOper.IsTelRegister(userId);
+            bool isNumberPlate = locationOper.IsNumberPlate(storeCmd.LicenseNum, storeCmd.garageID);
+            if (isTelRegister == false)
+            {
+                UILogServer.ins.error("该号码未被注册,请先注册");
+            }
+            else if (isNumberPlate == false)
+            {
+                UILogServer.ins.error("车库中查无此车");
+            }
+            else
+            {
+                storeCmd.parkingRecordsID = locationOper.GetParkingRecordsID(storeCmd.LicenseNum);
+                if (storeCmd.userID != "" && storeCmd.LicenseNum != "" && storeCmd.parkingRecordsID != 0)
+                {
+                    queue.SetMessage((Command)storeCmd.Clone());
+                    UILogServer.ins.info("发送成功");
+                }
+                else
+                {
+                    UILogServer.ins.error("电话号码或号牌错误");
+                }
+            }
+
+        }
+
+        public void Run()
+        {
+            while (true)
+            {
+                rnd = new Random(DateTime.Now.Millisecond);
+                if (numStatusMap.Count > 0)
+                {
+                    int index = rnd.Next(0, numStatusMap.Count);
+                    int status = numStatusMap[index].status;
+                    if(status == 0)
+                    {
+                        Store(numStatusMap[index].licNum);
+                    }
+                    else
+                    {
+                        Fetch(numStatusMap[index].licNum);
+                    }
+                }
+                Thread.Sleep(licInterval);
+            }
+        }
+    }
+    class CarStatusStru
+    {
+        public string licNum { get; set; }
+        public int status { get; set; }
+        public CarStatusStru()
+        {
+            licNum = "";
+            status = 0;
+        }
+        public CarStatusStru(string str, int stat)
+        {
+            licNum = str;
+            status = stat;
+        }
+    }
+
+}

+ 1 - 0
parkMonitor/parkMonitor.csproj

@@ -111,6 +111,7 @@
     <Compile Include="manualParking\ManualParking.Designer.cs">
       <DependentUpon>ManualParking.cs</DependentUpon>
     </Compile>
+    <Compile Include="manualParking\ManualParkingSimul.cs" />
     <Compile Include="manualParking\Register.cs">
       <SubType>Form</SubType>
     </Compile>

+ 3 - 3
parkMonitor/server/CoreThread/QueuingThread.cs

@@ -212,7 +212,7 @@ namespace parkMonitor.server.CoreThread
                     if (licTimeSpan.TotalMinutes >= licenseTime)
                     {
                         //异常号牌不再入队,而是界面提示管理员,并让号牌机线程
-                        UILogServer.ins.error("异常:号牌 " + node.LicenseNum + " 已扫描超过" + licTimeSpan.TotalMinutes + "分钟 ,强制出队");
+                        UILogServer.ins.error("异常:号牌 " + node.LicenseNum + " 已扫描超过" + String.Format("{0:F1}",licTimeSpan.TotalMinutes) + "分钟 ,强制出队");
                         //停车完成,将相应车牌复位
                         NumberMachineMessage numberMachineMessage = new NumberMachineMessage();
                         numberMachineMessage.aNode = new NumberMachineNode();
@@ -257,7 +257,7 @@ namespace parkMonitor.server.CoreThread
                         }
                     }
                 }
-                if (!matched)
+                if (!matched && !StoreCmdQueue.Contains(cmd))
                 {
                     StoreCmdQueue.Enqueue((Command)cmd.Clone());
                 }
@@ -294,7 +294,7 @@ namespace parkMonitor.server.CoreThread
             }
             lock (LicenseQueue)
             {
-                if (!matched)
+                if (!matched && !LicenseQueue.Contains(license))
                 {
                     LicenseQueue.Enqueue((NumberMachineNode)license.Clone());
                 }

+ 40 - 33
parkMonitor/server/NumMachine/NumMachineSimul.cs

@@ -10,13 +10,14 @@ namespace parkMonitor.server
 {
     class NumMachineSimul : IEquipments
     {
+        private const int licInterval = 90000;//90秒
         ///<summary>号牌队列</summary>
         private Queue<NumberMachineNode> LicBuffer = new Queue<NumberMachineNode>();
         /// <summary>
         /// 号牌信息
         /// </summary>
         private NumberMachineMessage nmMsg = new NumberMachineMessage();
-        private const string header = "鄂A000";
+        private const string header = "鄂A";
         /// <summary>
         /// 号牌数组
         /// </summary>
@@ -34,26 +35,31 @@ namespace parkMonitor.server
         {
             while (!closing)
             {
-                Thread.Sleep(2000);
-                foreach (NumberMachineNode n in NumNodes)
+                lock (NumNodes)
                 {
-                    if(!LicBuffer.Contains(n))
-                        LicBuffer.Enqueue((NumberMachineNode)n.Clone());
-                    Thread.Sleep(7000);
-                }
-                //除去已停车完成的号牌
-                lock (LicBuffer)
-                {
-                    NumberMachineNode temp = null;
-                    for (int i = 0; i < LicBuffer.Count; i++)
+                    foreach (NumberMachineNode n in NumNodes)
                     {
-                        temp = LicBuffer.Dequeue();
-                        if (temp.ip != "")
+                        lock (LicBuffer)
                         {
-                            LicBuffer.Enqueue(temp);
+                            if (!LicBuffer.Contains(n) && (nmMsg.aNode==null || nmMsg.aNode.LicenseNum!=n.LicenseNum))
+                            {
+                                LicBuffer.Enqueue((NumberMachineNode)n.Clone());
+                            }
+                            //除去已停车完成的号牌
+                            NumberMachineNode temp = null;
+                            for (int i = 0; i < LicBuffer.Count; i++)
+                            {
+                                temp = (NumberMachineNode)LicBuffer.Dequeue().Clone();
+                                if (temp.ip != "")
+                                {
+                                    LicBuffer.Enqueue(temp);
+                                }
+                            }
                         }
+                        Thread.Sleep(licInterval);
                     }
                 }
+                Thread.Sleep(200);
             }
         }
 
@@ -69,7 +75,7 @@ namespace parkMonitor.server
         {
             lock (LicBuffer)
             {
-                //准备输出的数据中存在非法Node,且LicBuffer可出队产生一个合法Node,则替换该非法Node
+                //准备输出的数据中存在非法Node,且LicBuffer可出队产生一个合法Node,则替换该非法Node,否则让Node=null
                 if (!NodeValidation(nmMsg.aNode))
                 {
                     for (int i = 0; i < LicBuffer.Count; i++)
@@ -77,7 +83,10 @@ namespace parkMonitor.server
                         NumberMachineNode n = LicBuffer.Dequeue();
                         if (NodeValidation(n))
                         {
-                            Console.WriteLine("号牌:" + n.LicenseNum + ",准备入队");
+                            if (nmMsg.aNode != null && nmMsg.aNode.ip != null)
+                            {
+                                LicBuffer.Enqueue((NumberMachineNode)nmMsg.aNode.Clone());
+                            }
                             nmMsg.aNode = n;
                             break;
                         }
@@ -87,11 +96,6 @@ namespace parkMonitor.server
                         }
                     }
                 }
-                //输出前再判断号牌是否合法
-                if (!NodeValidation(nmMsg.aNode))
-                {
-                    nmMsg.aNode = null;
-                }
             }
             return nmMsg;
         }
@@ -144,23 +148,26 @@ namespace parkMonitor.server
             closing = false;
             //创建模拟号牌
             int temp = 0;
+            for (int i = 0; i < 10; i++)
+            {
+                temp = i*11111;
+                NumExamples.Add(header + temp.ToString("D5"));
+            }
+            foreach (string str in NumExamples)
+            {
+                NumberMachineNode node = new NumberMachineNode("192.168.0.20", 1, str, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), 1);
+                NumNodes.Add((NumberMachineNode)node.Clone());
+            }
+
             Task.Factory.StartNew(() =>
             {
-                for (int i = 0; i < 10; i++)
-                {
-                    temp = 111 * i;
-                    NumExamples.Add(header + temp.ToString("D3"));
-                }
-                foreach (string str in NumExamples)
-                {
-                    NumberMachineNode node = new NumberMachineNode("192.168.0.20",1, str, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), 1);
-                    NumNodes.Add((NumberMachineNode)node.Clone());
-                }
+                Run();
             });
             Task.Factory.StartNew(() =>
             {
-                Run();
+                ManualParkingSimul.ins = new ManualParkingSimul();
             });
+           
         }
 
         public void Stop()