Explorar o código

停车流程,本地数据库操作

yc_t %!s(int64=6) %!d(string=hai) anos
pai
achega
3896816090

BIN=BIN
PLCLinker/.vs/PLCLinker/v15/.suo


BIN=BIN
PLCLinker/.vs/PLCLinker/v15/Server/sqlite3/storage.ide


+ 7 - 6
PLCLinker/PLCS7/PLCS7.cs

@@ -369,19 +369,20 @@ namespace PLCS7
                     int offset = 36 * (ts.terminalID - 1);
                     if (whoami.Equals(PLCDataType.central))
                     {
-                        if (ts.paymentStatus != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 22 + offset, BitConverter.GetBytes(BytesRevert(ts.paymentStatus))); }
-                        if (ts.licVerification != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 24 + offset, BitConverter.GetBytes(BytesRevert(ts.licVerification))); }
-                        if (ts.parkingFee != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 26 + offset, BitConverter.GetBytes(BytesRevert(ts.parkingFee))); }
-                        if (ts.userType != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 28 + offset, BitConverter.GetBytes(BytesRevert(ts.userType))); }
+                        if (ts.paymentStatus != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 26 + offset, BitConverter.GetBytes(BytesRevert(ts.paymentStatus))); }
+                        if (ts.licVerification != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 28 + offset, BitConverter.GetBytes(BytesRevert(ts.licVerification))); }
+                        if (ts.parkingFee != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 30 + offset, BitConverter.GetBytes(BytesRevert(ts.parkingFee))); }
+                        if (ts.userType != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 32 + offset, BitConverter.GetBytes(BytesRevert(ts.userType))); }
                     }
                     else if (whoami.Equals(PLCDataType.terminal))
                     {
+                        if (ts.terminalStatus != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 2 + offset, BitConverter.GetBytes(BytesRevert(ts.terminalStatus))); }
                         if (ts.btnStatus != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 4 + offset, BitConverter.GetBytes(BytesRevert(ts.btnStatus))); }
-                        if (ts.terminalStatus != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 4 + offset, BitConverter.GetBytes(BytesRevert(ts.terminalStatus))); }
                         if (ts.licenseCodeA != -1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 6 + offset, BitConverter.GetBytes(BytesRevert(ts.licenseCodeA))); }
                         if (ts.licenseCodeB != -1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 10 + offset, BitConverter.GetBytes(BytesRevert(ts.licenseCodeB))); }
                         if (ts.licenseCodeC != -1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 14 + offset, BitConverter.GetBytes(BytesRevert(ts.licenseCodeC))); }
-                        if (ts.receiptNum != -1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 18 + offset, BitConverter.GetBytes(BytesRevert(ts.receiptNum))); }
+                        if (ts.licenseCodeD != -1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 18 + offset, BitConverter.GetBytes(BytesRevert(ts.licenseCodeD))); }
+                        if (ts.receiptNum != -1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 22 + offset, BitConverter.GetBytes(BytesRevert(ts.receiptNum))); }
                     }
                 }
                 else if (abstractPLCMsg.GetType().Equals(typeof(MainBlockStru)) && whoami.Equals(PLCDataType.central))

BIN=BIN
PLCLinker/PLCS7/bin/Release/PLCS7.dll


BIN=BIN
PLCLinker/PLCS7/bin/Release/PLCS7.pdb


+ 113 - 1
PLCLinker/PLCS7/entity.cs

@@ -11,19 +11,59 @@ namespace PLCS7
     /// </summary>
     public struct TerminalStru
     {
+        /// <summary>
+        /// 终端ID号
+        /// </summary>
         public short terminalID;
+        /// <summary>
+        /// 终端状态,0停,1取
+        /// </summary>
         public short terminalStatus;//终端写入
+        /// <summary>
+        /// 按钮状态,0注册,1非注册
+        /// </summary>
         public short btnStatus;//终端写入
+        /// <summary>
+        /// 注册用户UserID
+        /// </summary>
         public int licenseCodeA;//终端写入
+        /// <summary>
+        /// 注册用户号牌地域标记
+        /// </summary>
         public int licenseCodeB;//终端写入
+        /// <summary>
+        /// 注册用户号牌后半部分A
+        /// </summary>
         public int licenseCodeC;//终端写入
+        /// <summary>
+        /// 注册用户号牌后半部分B
+        /// </summary>
+        public int licenseCodeD;//终端写入
+        /// <summary>
+        /// 凭证号
+        /// </summary>
         public int receiptNum;//终端写入
-        public short paymentStatus;//中控写入,22
+        /// <summary>
+        /// 支付状态,0-1失败-2成功-3管理员放行
+        /// </summary>
+        public short paymentStatus;//中控写入,26
+        /// <summary>
+        /// 1-成功,2-号牌比对不成功
+        /// </summary>
         public short licVerification;//中控写入
+        /// <summary>
+        /// 停车费用,0-99999
+        /// </summary>
         public short parkingFee;//中控写入
+        /// <summary>
+        /// 用户类型,0-1普通-2月卡-3季卡-4年卡VIP
+        /// </summary>
         public short userType;//中控写入
         public short coordX;//PLC
         public short coordY;//PLC
+        /// <summary>
+        /// 地感信号
+        /// </summary>
         public short groundStatus;
 
         public override string ToString()
@@ -57,19 +97,61 @@ namespace PLCS7
     /// </summary>
     public struct MainBlockStru
     {
+        /// <summary>
+        /// 终端ID号
+        /// </summary>
         public short terminalID;
+        /// <summary>
+        /// 号牌机启动指令
+        /// </summary>
         public short numMachineLaunch;
+        /// <summary>
+        /// 摆扫启动指令
+        /// </summary>
         public short sweepLaserLaunch;
+        /// <summary>
+        /// 轮距启动指令
+        /// </summary>
         public short wheelbaseLaserLaunch;
+        /// <summary>
+        /// 急停
+        /// </summary>
         public short scram;
+        /// <summary>
+        /// 就绪
+        /// </summary>
         public short ready;
+        /// <summary>
+        /// 停车运行
+        /// </summary>
         public short parkingRunning;
+        /// <summary>
+        /// 取车运行
+        /// </summary>
         public short fetchingRunning;
+        /// <summary>
+        /// 摆扫激光状态
+        /// </summary>
         public short sweepLaserStatus;
+        /// <summary>
+        /// 号牌机获取
+        /// </summary>
         public short licenseReceived;//中控可写
+        /// <summary>
+        /// 本地自动模式
+        /// </summary>
         public short localAutoMode;
+        /// <summary>
+        /// 云端模式
+        /// </summary>
         public short remoteMode;
+        /// <summary>
+        /// 本地手动模式
+        /// </summary>
         public short localManualMode;
+        /// <summary>
+        /// 流程中断
+        /// </summary>
         public short processStopped;
         public short groundAStatus;
         public short groundBStatus;
@@ -80,6 +162,9 @@ namespace PLCS7
         public short leaveAAndOpen;
         public short leaveBAndOpen;
         public short leaveCAndOpen;
+        /// <summary>
+        /// 流程完成
+        /// </summary>
         public short processCompleted;
 
         public override string ToString()
@@ -113,16 +198,43 @@ namespace PLCS7
     /// </summary>
     public struct ParkingSpaceStru
     {
+        /// <summary>
+        /// 车位编号
+        /// </summary>
         public short parkingSpace;
+        /// <summary>
+        /// 长
+        /// </summary>
         public short length;
+        /// <summary>
+        /// 宽
+        /// </summary>
         public short width;
+        /// <summary>
+        /// 高
+        /// </summary>
         public short height;
+        /// <summary>
+        /// 楼层编号
+        /// </summary>
         public short floorNo;
         public short coordX;
         public short coordY;
+        /// <summary>
+        /// 凭证号
+        /// </summary>
         public int receiptNum;
+        /// <summary>
+        /// 车位状态,0空位-1占用-2保留-3故障
+        /// </summary>
         public short spaceStatus;
+        /// <summary>
+        /// 前轮距
+        /// </summary>
         public short frontWheelbase;
+        /// <summary>
+        /// 后轮距
+        /// </summary>
         public short rearWheelbase;
 
         public override string ToString()

BIN=BIN
PLCLinker/PLCS7/obj/Release/PLCS7.dll


BIN=BIN
PLCLinker/PLCS7/obj/Release/PLCS7.pdb


+ 8 - 8
PLCLinker/centralController/Form1.Designer.cs

@@ -159,12 +159,12 @@
             this.bar2.CanDockTop = false;
             this.bar2.CanHide = true;
             this.bar2.CanUndock = false;
-            this.bar2.Controls.Add(this.testPanel);
             this.bar2.Controls.Add(this.PLCMonitorPanel);
-            this.bar2.Controls.Add(this.NumMachineMonitorPanel);
-            this.bar2.Controls.Add(this.ParkingSpaceMonitorPanel);
-            this.bar2.Controls.Add(this.RecordsMonitorPanel);
+            this.bar2.Controls.Add(this.testPanel);
             this.bar2.Controls.Add(this.paymentPanel);
+            this.bar2.Controls.Add(this.RecordsMonitorPanel);
+            this.bar2.Controls.Add(this.ParkingSpaceMonitorPanel);
+            this.bar2.Controls.Add(this.NumMachineMonitorPanel);
             this.bar2.DockTabAlignment = DevComponents.DotNetBar.eTabStripAlignment.Top;
             this.bar2.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
             this.bar2.IsMaximized = false;
@@ -178,7 +178,7 @@
             this.bar2.LayoutType = DevComponents.DotNetBar.eLayoutType.DockContainer;
             this.bar2.Location = new System.Drawing.Point(0, 0);
             this.bar2.Name = "bar2";
-            this.bar2.SelectedDockTab = 5;
+            this.bar2.SelectedDockTab = 0;
             this.bar2.SingleLineColor = System.Drawing.SystemColors.ControlDarkDark;
             this.bar2.Size = new System.Drawing.Size(593, 424);
             this.bar2.Stretch = true;
@@ -413,8 +413,8 @@
             this.bar3.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
             this.bar3.AutoSyncBarCaption = true;
             this.bar3.CloseSingleTab = true;
-            this.bar3.Controls.Add(this.basicInfoPanel);
             this.bar3.Controls.Add(this.warningPanel);
+            this.bar3.Controls.Add(this.basicInfoPanel);
             this.bar3.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
             this.bar3.GrabHandleStyle = DevComponents.DotNetBar.eGrabHandleStyle.Caption;
             this.bar3.IsMaximized = false;
@@ -424,13 +424,13 @@
             this.bar3.LayoutType = DevComponents.DotNetBar.eLayoutType.DockContainer;
             this.bar3.Location = new System.Drawing.Point(3, 0);
             this.bar3.Name = "bar3";
-            this.bar3.SelectedDockTab = 0;
+            this.bar3.SelectedDockTab = 1;
             this.bar3.Size = new System.Drawing.Size(182, 424);
             this.bar3.Stretch = true;
             this.bar3.Style = DevComponents.DotNetBar.eDotNetBarStyle.Office2003;
             this.bar3.TabIndex = 0;
             this.bar3.TabStop = false;
-            this.bar3.Text = "基本信息";
+            this.bar3.Text = "警告与提示";
             // 
             // basicInfoPanel
             // 

+ 4 - 0
PLCLinker/centralController/Monitor/Monitor.cs

@@ -70,6 +70,10 @@ namespace Monitor
         /// ϵͳ¹Ø±Õ״̬
         /// </summary>
         bool isClosing;
+        /// <summary>
+        /// ³µ¿âID
+        /// </summary>
+        public static int garageID;
 
         private void PLCUpdate()
         {

+ 1 - 2
PLCLinker/centralController/Monitor/SystemInitializer.cs

@@ -26,7 +26,6 @@ namespace Monitor
             int retryCount = 0;
             string remoteDBConnStr, localDBConnStr;
             int DBtimeout;
-            int garageID;
             MyTimer mt = new MyTimer();
             mt.StartTiming();
             try
@@ -50,7 +49,7 @@ namespace Monitor
                 //webServer端口
                 Monitor.webPort = Convert.ToInt32(ConfigurationManager.AppSettings.Get("webPort"));
                 
-                garageID = Convert.ToInt32(ConfigurationManager.AppSettings.Get("garageID"));
+                Monitor.garageID = Convert.ToInt32(ConfigurationManager.AppSettings.Get("garageID"));
                 //配置文件读取结束,进入状态1
                 Monitor.initializeState = 1;
                 initStatus = true;

+ 316 - 29
PLCLinker/centralController/Terminal/Terminal.cs

@@ -2,50 +2,336 @@ using Terminal;
 using DatabaseDLL;
 using System.Collections.Generic;
 using System.Threading.Tasks;
+using PLCS7;
+using System;
+using System.Text;
+using MySql.Data.MySqlClient;
+using System.Threading;
 
 namespace Terminal
 {
-	public class Terminal : ITerminalDisplay
-	{
-        public static List<PLCS7.TerminalStru> terminalInfo = new List<PLCS7.TerminalStru>();
+    public class Terminal : ITerminalDisplay
+    {
+        public static List<TerminalStru> terminalInfo = new List<PLCS7.TerminalStru>();
+        public static Dictionary<int, string> idLicMap = new Dictionary<int, string>();
         public static bool isClosing = false;
 
-		public void FeeCal()
-		{
+        public void FeeCal()
+        {
 
-		}
+        }
 
-		public void GetTerminalState()
-		{
+        public void GetTerminalState()
+        {
 
-		}
+        }
 
-		public List<object> GetParkingRecords()
-		{
-			return null;
-		}
+        public List<object> GetParkingRecords()
+        {
+            return null;
+        }
 
-		public List<object> GetOrderRecords()
-		{
-			return null;
-		}
+        public List<object> GetOrderRecords()
+        {
+            return null;
+        }
 
-		private object SearchPaymentScheme()
-		{
-			return null;
-		}
+        private object SearchPaymentScheme()
+        {
+            return null;
+        }
 
-		private void UpdateParkingRecords(int Object)
-		{
+        private void UpdateParkingRecords(int Object)
+        {
 
-		}
+        }
 
+        private void UpdateAllParkingSpace()
+        {
+            string findParkingSpace = "select parkingSpaceID from parkingspace;";
+            MySqlDataReader reader = Monitor.Monitor.localDBOper.Query(findParkingSpace);
+            HashSet<int> recordsIDSet = new HashSet<int>();
+            if (reader != null)
+            {
+                while (reader.Read())
+                {
+                    if (reader.HasRows)
+                    {
+                        recordsIDSet.Add(reader.GetInt32("parkingSpaceID"));
+                    }
+                }
+            }
+            List<string> updateSpaceList = new List<string>();
+            List<string> insertSpaceList = new List<string>();
+            string updateParkingSpace = "";
+            string insertParkingSpace = "";
+            for (int i = 0; i < Monitor.Monitor.parkingSpaceInfo.Count; i++)
+            {
+                if (recordsIDSet.Contains(Monitor.Monitor.parkingSpaceInfo[i].parkingSpace))
+                {
+                    updateParkingSpace = "update parkingspace set parkingSpaceX = " + Monitor.Monitor.parkingSpaceInfo[i].coordX +
+                        ",parkingSpaceY = " + Monitor.Monitor.parkingSpaceInfo[i].coordY + ",parkingSpaceZ = " + Monitor.Monitor.parkingSpaceInfo[i].floorNo + ",parkingSpaceState = " + Monitor.Monitor.parkingSpaceInfo[i].spaceStatus + " where (parkingSpaceID = " + Monitor.Monitor.parkingSpaceInfo[i].parkingSpace + ");";
+                    updateSpaceList.Add(updateParkingSpace);
+                }
+                else
+                {
+                    insertParkingSpace = "insert into parkingspace (parkingSpaceID,parkingSpaceX,parkingSpaceY,parkingSpaceZ,parkingSpaceState) values (" + Monitor.Monitor.parkingSpaceInfo[i].parkingSpace + "," + Monitor.Monitor.parkingSpaceInfo[i].coordX +
+                        "," + Monitor.Monitor.parkingSpaceInfo[i].coordY + "," + Monitor.Monitor.parkingSpaceInfo[i].floorNo + "," + Monitor.Monitor.parkingSpaceInfo[i].spaceStatus + ");";
+                    insertSpaceList.Add(insertParkingSpace);
+                }
+            }
+
+        }
+        /// <summary>
+        /// 从终端结构体中获得车牌号
+        /// </summary>
+        /// <param name="ts"></param>
+        /// <returns></returns>
+        private string GetLicenseFromTerm(TerminalStru ts)
+        {
+            string header = Encoding.ASCII.GetString(BitConverter.GetBytes(ts.licenseCodeB));
+            string identityA = Encoding.ASCII.GetString(BitConverter.GetBytes(ts.licenseCodeC));
+            byte[] bytes = BitConverter.GetBytes(ts.licenseCodeD);
+            List<byte> newBytes = new List<byte>();
+            for (int i = 0; i < bytes.Length; i++)
+            {
+                if (bytes[i] != 0x00) { newBytes.Add(bytes[i]); }
+            }
+            string identityB = Encoding.ASCII.GetString(newBytes.ToArray());
+            return header + identityA + identityB;
+        }
+        /// <summary>
+        /// 更新车辆状态
+        /// </summary>
+        /// <param name="lic"></param>
+        /// <param name="state"></param>
+        private void UpdateVehicle(string lic, int state, int parkingRecordsID, bool park, bool remote)
+        {
+            MySqlDataReader reader;
+            //查询车辆是否在车辆表中
+            string checkVehicleState = "select * from vehicle where numberPlate = '" + lic + "';";
+            if (!remote)
+            {
+                reader = Monitor.Monitor.localDBOper.Query(checkVehicleState);
+            }
+            else
+            {
+                reader = Monitor.Monitor.remoteDBOper.Query(checkVehicleState);
+            }
+            if (reader != null)
+            {
+                //更新车辆状态
+                string updateVehicleState = "";
+                if (park)
+                {
+                    updateVehicleState = "update vehicle set vehiclepParkState = " + state + " ,parkingRecordsID = " + parkingRecordsID + " where numberPlate = '" + lic + "';";
+                }
+                else
+                {
+                    updateVehicleState = "update vehicle set vehiclepParkState = " + state + " where numberPlate = '" + lic + "';";
+                }
+                List<string> list = new List<string>();
+                list.Add(updateVehicleState);
+                if (!remote)
+                {
+                    Monitor.Monitor.localDBOper.UpdateTransaction(list);
+                }
+                else
+                {
+                    Monitor.Monitor.localDBOper.UpdateTransaction(list);
+                }
+            }
+            else
+            {
+                //插入车辆
+                string insertVehicleWithState = "";
+                if (park)
+                {
+                    insertVehicleWithState = "insert into vehicle (numberPlate,vehicleTypeID,vehiclepParkState,parkingRecordsID) values " +
+                    "('" + lic + "',NULL,'" + state + "'," + parkingRecordsID + ");";
+                }
+                else
+                {
+                    Console.WriteLine("明显异常,取车发现无车辆");
+                    return;
+                }
+
+                List<string> list = new List<string>();
+                list.Add(insertVehicleWithState);
+                if (!remote)
+                {
+                    Monitor.Monitor.localDBOper.Insert(list);
+                }
+                else
+                {
+                    Monitor.Monitor.remoteDBOper.Insert(list);
+                }
+            }
+        }
+        /// <summary>
+        /// 停车流程,收到号牌机启动后操作过程
+        /// </summary>
+        private void ParkNumSubProcess()
+        {
+            int numMachineLaunch = Monitor.Monitor.mainBlockInfo.numMachineLaunch;
+            if (numMachineLaunch != 0)
+            {
+                for (int i = 0; i < terminalInfo.Count; i++)
+                {
+                    //启动指令与终端id匹配
+                    if (numMachineLaunch == terminalInfo[i].terminalID)
+                    {
+                        TerminalStru term = terminalInfo[i];
+                        if (term.terminalStatus == (short)0)
+                        {
+                            string license = Monitor.Monitor.numMachineLinker.GetLicensePlate(numMachineLaunch);
+                            if (license != "")
+                            {
+                                //记录或更新当前号牌
+                                lock (idLicMap)
+                                {
+                                    if (idLicMap.ContainsKey(numMachineLaunch))
+                                    {
+                                        idLicMap[numMachineLaunch] = license;
+                                    }
+                                    else
+                                    {
+                                        idLicMap.Add(numMachineLaunch, license);
+                                    }
+                                }
+                                //注册
+                                if (term.btnStatus == (short)0)
+                                {
+                                    int userID = term.licenseCodeA;
+                                    string userLicense = GetLicenseFromTerm(term);
+                                    TerminalStru ts = new TerminalStru
+                                    {
+                                        paymentStatus = -1,
+                                        parkingFee = -1,
+                                        userType = -1
+                                    };
+                                    //与云端数据比对
+                                    string checkNetSql = "select * from user where userID=1;";
+                                    if (Monitor.Monitor.remoteDBOper.Query(checkNetSql) != null)
+                                    {
+                                        string userInfoCheckSql = "select * from usercarrelation where userID = '" + userID + "'and numberPlate = '" + userLicense + "';";
+                                        MySqlDataReader reader = Monitor.Monitor.remoteDBOper.Query(userInfoCheckSql);
+                                        if (reader == null)
+                                        {
+                                            ts.licVerification = 2;//验证失败
+                                            Monitor.Monitor.PLC.WriteToPLC(ts, PLCDataType.central);
+                                        }
+                                        else
+                                        {
+                                            ts.licVerification = 1;//验证成功
+                                            Monitor.Monitor.PLC.WriteToPLC(ts, PLCDataType.central);
+                                        }
+                                    }
+                                    else
+                                    {
+                                        ts.licVerification = 1;//网络异常,跳过验证
+                                        Monitor.Monitor.PLC.WriteToPLC(ts, PLCDataType.central);
+                                    }
+                                    //告知PLC获取号牌
+                                    MainBlockStru mb = new MainBlockStru
+                                    {
+                                        licenseReceived = (short)1
+                                    };
+                                    Monitor.Monitor.PLC.WriteToPLC(mb, PLCDataType.central);
+                                }
+                                //非注册
+                                else
+                                {
+                                    MainBlockStru mb = new MainBlockStru
+                                    {
+                                        licenseReceived = (short)1
+                                    };
+                                    Monitor.Monitor.PLC.WriteToPLC(mb, PLCDataType.central);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        /// <summary>
+        /// 停车相关操作
+        /// 1.读取到号牌机启动指令,启动号牌机并根据是否注册用户进行操作
+        ///     非注册拿到号牌后记录并告知plc
+        ///     注册用户,核对号牌与用户关联信息
+        /// 2.停车流程结束,写数据库
+        /// </summary>
         private void ParkProcess()
         {
-            //读取到号牌机启动指令
-            if (Monitor.Monitor.mainBlockInfo.numMachineLaunch != (short)0)
+            //1.号牌机启动
+            Task.Factory.StartNew(() =>
             {
+                while (!isClosing)
+                {
+                    ParkNumSubProcess();
+                    Thread.Sleep(Monitor.Monitor.plcRefreshInterval);
+                }
+            });
 
+            //2.停车流程结束
+            int processAttrib = Monitor.Monitor.mainBlockInfo.parkingRunning;
+            int processCompleted = Monitor.Monitor.mainBlockInfo.processCompleted;
+            int currentTerm = Monitor.Monitor.mainBlockInfo.terminalID;
+            int parkingSpaceID = 0;
+            if (processAttrib == 1 && processCompleted == 1)
+            {
+                TerminalStru term;
+                string license;
+                //找到终端号,判断是否注册用户
+                for (int i = 0; i < terminalInfo.Count; i++)
+                {
+                    //拿到号牌
+                    if (terminalInfo[i].terminalID == currentTerm && idLicMap.TryGetValue(currentTerm, out license) && license != "")
+                    {
+                        term = terminalInfo[i];
+                        //找到停车位置
+                        for (int s = 0; s < Monitor.Monitor.parkingSpaceInfo.Count; s++)
+                        {
+                            if (Monitor.Monitor.parkingSpaceInfo[i].receiptNum == term.receiptNum)
+                            {
+                                parkingSpaceID = Monitor.Monitor.parkingSpaceInfo[i].parkingSpace;
+                                break;
+                            }
+                        }
+                        //无车位信息则跳出当前循环
+                        if (parkingSpaceID == 0) break;
+                        //插入停车记录
+                        string parkingRecordsSql = "";
+                        if (term.licenseCodeA != 0)
+                        {
+                            parkingRecordsSql = "INSERT INTO parkingrecords (userID, numberPlate,parkingSpaceID,garageID,parkingRecordsState,realParkTime,receiptNum,parkingPrice)" +
+                                "values ('" + term.licenseCodeA + "','" + license + "','" + parkingSpaceID + "','" + Monitor.Monitor.garageID + "',3,'" + DateTime.Now.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss") + "','" + term.receiptNum + "',NULL);";
+                        }
+                        else
+                        {
+                            parkingRecordsSql = "INSERT INTO parkingrecords (userID, numberPlate,parkingSpaceID,garageID,parkingRecordsState,realParkTime,receiptNum,parkingPrice)" +
+                                "values ('" + 1 + "','" + license + "','" + parkingSpaceID + "','" + Monitor.Monitor.garageID + "',3,'" + DateTime.Now.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss") + "','" + term.receiptNum + "',NULL);";
+                        }
+                        List<string> list = new List<string>();
+                        list.Add(parkingRecordsSql);
+                        Monitor.Monitor.localDBOper.Insert(list);
+                        //查询记录ID号
+                        string findRecordSql = "select parkingRecordsID from parkingrecords where receiptNum = " + term.receiptNum + ";";
+                        MySqlDataReader reader = Monitor.Monitor.localDBOper.Query(findRecordSql);
+                        int parkingRecordsID = 0;
+                        try { parkingRecordsID = reader.GetInt32("parkingRecordsID"); } catch (Exception) { break; };
+                        //更新本地车辆表
+                        UpdateVehicle(license, parkingRecordsID, 1, true, false);
+
+
+                        //注册用户加入云端操作
+                        if (term.btnStatus == 0)
+                        {
+                            //string
+                            //Monitor.Monitor.remoteDBOper()
+                        }
+                    }
+                }
             }
         }
         private void FetchProcess()
@@ -55,11 +341,12 @@ namespace Terminal
 
         public void Start()
         {
-            Task.Factory.StartNew(()=> {
-                
+            Task.Factory.StartNew(() =>
+            {
+
             });
         }
-        
+
         public void Stop()
         {
             isClosing = true;

BIN=BIN
PLCLinker/centralController/bin/Release/centralController.exe


+ 2 - 2
PLCLinker/centralController/bin/Release/centralController.exe.config

@@ -6,8 +6,8 @@
   <appSettings>
     <add key="retryCount" value="3"/>
     <!--数据库信息-->
-    <add key="remoteDBConnStr" value="Data Source=59.175.148.85;port=3306;uid=root;pooling=true;max pool size=1024;pwd=x5;database=zxpark;CharSet=utf8;Allow Zero Datetime=true;"/>
-    <!--<add key="remoteDBConnStr" value="Data Source=127.0.0.1;port=20000;uid=root;pooling=true;max pool size=1024;pwd=yct;database=zxpark_remote;CharSet=utf8;Allow Zero Datetime=true;"/>-->
+    <!--<add key="remoteDBConnStr" value="Data Source=59.175.148.85;port=3306;uid=root;pooling=true;max pool size=1024;pwd=x5;database=zxpark;CharSet=utf8;Allow Zero Datetime=true;"/>-->
+    <add key="remoteDBConnStr" value="Data Source=127.0.0.1;port=20000;uid=root;pooling=true;max pool size=1024;pwd=yct;database=zxpark_remote;CharSet=utf8;Allow Zero Datetime=true;"/>
     <add key="localDBConnStr" value="Data Source=127.0.0.1;port=20000;uid=root;pooling=true;max pool size=1024;pwd=yct;database=zxpark;CharSet=utf8;Allow Zero Datetime=true;"/>
     <add key="DBtimeout" value="3"/>
     <!--号牌机信息-->

BIN=BIN
PLCLinker/centralController/bin/Release/centralController.pdb


BIN=BIN
PLCLinker/centralController/obj/Release/centralController.csproj.GenerateResource.Cache


BIN=BIN
PLCLinker/centralController/obj/Release/centralController.csprojResolveAssemblyReference.cache


BIN=BIN
PLCLinker/centralController/obj/Release/centralController.exe


BIN=BIN
PLCLinker/centralController/obj/Release/centralController.pdb


BIN=BIN
PLCLinker/centralController/sdk/PLC/PLCS7.dll


BIN=BIN
resources/PLCS7.dll