|
@@ -162,7 +162,7 @@ namespace parkMonitor.server.CoreThread
|
|
|
{
|
|
|
Robot.robot1.occupied = true;
|
|
|
//UILogServer.ins.log("获得机械手资源");
|
|
|
- Log.WriteLog(LogType.NOT_DATABASE,LogFile.LOG, "获得机械手资源");
|
|
|
+ Log.WriteLog(LogType.NOT_DATABASE, LogFile.LOG, "获得机械手资源");
|
|
|
break;
|
|
|
}
|
|
|
mt.EndTiming();
|
|
@@ -177,7 +177,7 @@ namespace parkMonitor.server.CoreThread
|
|
|
{
|
|
|
mt.rolledBack = true;
|
|
|
UILogServer.ins.error("启动机械手资源超时,已启动回滚");
|
|
|
- Log.WriteLog(LogType.NOT_DATABASE,LogFile.ERROR, "启动机械手资源超时,已启动回滚");
|
|
|
+ Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, "启动机械手资源超时,已启动回滚");
|
|
|
return false;
|
|
|
}
|
|
|
Thread.Sleep(100);
|
|
@@ -212,31 +212,86 @@ namespace parkMonitor.server.CoreThread
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
+
|
|
|
//复位车辆状态;若已更新过车位则还需复位总车位数,车位状态
|
|
|
if (!queueCmd.manual)
|
|
|
{
|
|
|
- //connectionStr = "SqlConnectionStr";
|
|
|
- //int freeSpaceCount = oper.getGarageFreeSpace(connectionStr, queueCmd.garageID);
|
|
|
- //if (isParking)
|
|
|
- //{
|
|
|
- // oper.UpdateVehicleParkState(connectionStr, queueCmd.LicenseNum, 0);
|
|
|
- // if (parkingSpaceUpdated)
|
|
|
- // {
|
|
|
- // freeSpaceCount = freeSpaceCount + 1;
|
|
|
- // oper.UpdateGarageFreeSpace(connectionStr, freeSpaceCount, queueCmd.garageID);
|
|
|
- // oper.UpdateParkingSpaceState(connectionStr, parkingSpaceID, 0);
|
|
|
- // }
|
|
|
- //}
|
|
|
- //else
|
|
|
- //{
|
|
|
- // oper.UpdateVehicleParkState(connectionStr, queueCmd.LicenseNum, 1);
|
|
|
- // if (parkingSpaceUpdated)
|
|
|
- // {
|
|
|
- // freeSpaceCount = freeSpaceCount - 1;
|
|
|
- // oper.UpdateGarageFreeSpace(connectionStr, freeSpaceCount, queueCmd.garageID);
|
|
|
- // oper.UpdateParkingSpaceState(connectionStr, parkingSpaceID, 1);
|
|
|
- // }
|
|
|
- //}
|
|
|
+ if (isParking)
|
|
|
+ {
|
|
|
+ //释放已分配车位
|
|
|
+ if (!ParkingSpaceManager.ins.SetParkingSpace(parkingSpaceID, 0))
|
|
|
+ {
|
|
|
+ EntityForCore.ins.globalStatus = false;
|
|
|
+ Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, "车位分配出现异常,需要重启");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ try
|
|
|
+ {
|
|
|
+ using (MySqlConnection conn = new MySqlConnection(DBConnection.remoteConf))
|
|
|
+ {
|
|
|
+ Operation.TryOpen(conn);
|
|
|
+ bool DBStoreStatus = false; //判断数据库事务操作是否正常
|
|
|
+ int temp;
|
|
|
+ string updateParkingSpaceSql = "update parkingspace set parkingSpaceState = 0 where parkingSpaceID = '" + parkingSpaceID + "'";
|
|
|
+ string updateFreeSpaceSql = "update garage set garageFreeSpace = '" + ParkingSpaceManager.ins.GetFreeSpaceCount() + "' where garageID = '" + ParkingSpaceManager.garageID + "'";
|
|
|
+ string updateVehicleStateSql = "update vehicle set vehiclepParkState = '" + 0 + "'where numberPlate = '" + queueCmd.LicenseNum + "'";
|
|
|
+ List<string> strs = new List<string>();
|
|
|
+ strs.Add(updateParkingSpaceSql);
|
|
|
+ strs.Add(updateFreeSpaceSql);
|
|
|
+ strs.Add(updateVehicleStateSql);
|
|
|
+ if (!Operation.MyTransaction(conn, strs, out temp))
|
|
|
+ {
|
|
|
+ //数据库操作失败写日志
|
|
|
+ Log.WriteLog(LogType.DATABASE, updateParkingSpaceSql);
|
|
|
+ Log.WriteLog(LogType.DATABASE, updateFreeSpaceSql);
|
|
|
+ Log.WriteLog(LogType.DATABASE, updateVehicleStateSql);
|
|
|
+ //Log.WriteLog(LogType.DATABASE, strs.ToArray().ToString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch
|
|
|
+ {
|
|
|
+ throw; //数据库异常待处理
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //复原已释放的车位
|
|
|
+ if (!ParkingSpaceManager.ins.SetParkingSpace(parkingSpaceID, 1))
|
|
|
+ {
|
|
|
+ EntityForCore.ins.globalStatus = false;
|
|
|
+ Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, "车位分配出现异常,需要重启");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ try
|
|
|
+ {
|
|
|
+ using (MySqlConnection conn = new MySqlConnection(DBConnection.remoteConf))
|
|
|
+ {
|
|
|
+ Operation.TryOpen(conn);
|
|
|
+ bool DBStoreStatus = false; //判断数据库事务操作是否正常
|
|
|
+ int temp;
|
|
|
+ string updateParkingSpaceSql = "update parkingspace set parkingSpaceState = 1 where parkingSpaceID = '" + parkingSpaceID + "'";
|
|
|
+ string updateFreeSpaceSql = "update garage set garageFreeSpace = '" + ParkingSpaceManager.ins.GetFreeSpaceCount() + "' where garageID = '" + ParkingSpaceManager.garageID + "'";
|
|
|
+ string updateVehicleStateSql = "update vehicle set vehiclepParkState = '" + 1 + "'where numberPlate = '" + queueCmd.LicenseNum + "'";
|
|
|
+ List<string> strs = new List<string>();
|
|
|
+ strs.Add(updateParkingSpaceSql);
|
|
|
+ strs.Add(updateFreeSpaceSql);
|
|
|
+ strs.Add(updateVehicleStateSql);
|
|
|
+ if (!Operation.MyTransaction(conn, strs, out temp))
|
|
|
+ {
|
|
|
+ //数据库操作失败写日志
|
|
|
+ Log.WriteLog(LogType.DATABASE, updateParkingSpaceSql);
|
|
|
+ Log.WriteLog(LogType.DATABASE, updateFreeSpaceSql);
|
|
|
+ Log.WriteLog(LogType.DATABASE, updateVehicleStateSql);
|
|
|
+ //Log.WriteLog(LogType.DATABASE, strs.ToArray().ToString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch
|
|
|
+ {
|
|
|
+ throw; //数据库异常待处理
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -354,7 +409,7 @@ namespace parkMonitor.server.CoreThread
|
|
|
}
|
|
|
if (ppp != null)
|
|
|
{
|
|
|
- Log.WriteLog(LogType.NOT_DATABASE,LogFile.LOG, "停车流程:" + queueCmd.LicenseNum + "已分配车位");
|
|
|
+ Log.WriteLog(LogType.NOT_DATABASE, LogFile.LOG, "停车流程:" + queueCmd.LicenseNum + "已分配车位");
|
|
|
break;
|
|
|
}
|
|
|
Thread.Sleep(200);
|
|
@@ -370,7 +425,7 @@ namespace parkMonitor.server.CoreThread
|
|
|
{
|
|
|
mt.rolledBack = true;
|
|
|
UILogServer.ins.error(queueCmd.LicenseNum + "超时未获得车位,指令退回");
|
|
|
- Log.WriteLog(LogType.NOT_DATABASE,LogFile.ERROR, queueCmd.LicenseNum + "超时未获得车位,指令退回");
|
|
|
+ Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, queueCmd.LicenseNum + "超时未获得车位,指令退回");
|
|
|
return null;
|
|
|
}
|
|
|
Thread.Sleep(100);
|
|
@@ -436,7 +491,7 @@ namespace parkMonitor.server.CoreThread
|
|
|
if (disconnectionCount == 1)
|
|
|
{
|
|
|
UILogServer.ins.error("激光" + lm.id + "连接异常");
|
|
|
- Log.WriteLog(LogType.NOT_DATABASE,LogFile.ERROR, "激光" + lm.id + "连接异常");
|
|
|
+ Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, "激光" + lm.id + "连接异常");
|
|
|
}
|
|
|
Thread.Sleep(10000);
|
|
|
}
|
|
@@ -602,6 +657,7 @@ namespace parkMonitor.server.CoreThread
|
|
|
|
|
|
//车位分配数据库操作加锁,直到启动机械手
|
|
|
Parking_Space ppp = new Parking_Space();
|
|
|
+ ParkingBuffer pb = null;
|
|
|
Data dataReal = new Data();
|
|
|
int garageID; //车库ID(Web发送)
|
|
|
string realParkTime; //停车时间(可执行队列)
|
|
@@ -617,6 +673,26 @@ namespace parkMonitor.server.CoreThread
|
|
|
//车位分配锁
|
|
|
lock (Parking_Space.spaceLock)
|
|
|
{
|
|
|
+ //获取缓冲位资源
|
|
|
+ bool displayed = false;
|
|
|
+ while (pb == null && !MyTimer.restart)
|
|
|
+ {
|
|
|
+ if (!displayed)
|
|
|
+ {
|
|
|
+ UILogServer.ins.error("缓冲位已满");
|
|
|
+ Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, "缓冲位分配失败");
|
|
|
+ }
|
|
|
+ pb = ParkingBufferManager.ins.MallocParkingBuffer(queueCmd.id);
|
|
|
+ Thread.Sleep(5000);
|
|
|
+ }
|
|
|
+ if (pb == null)
|
|
|
+ {
|
|
|
+ UILogServer.ins.error("缓冲位分配失败,流程已回滚");
|
|
|
+ Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, "缓冲位分配失败,流程已回滚");
|
|
|
+ Rollback(queueCmd, 0, false, true, lmToBeReleased);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
//获取车位资源
|
|
|
ppp = WaitForParkingSpaceResource(queueCmd, out freeSpaceCount);
|
|
|
|
|
@@ -682,7 +758,7 @@ namespace parkMonitor.server.CoreThread
|
|
|
bool DBStoreStatus = false; //判断数据库事务操作是否正常
|
|
|
int temp;
|
|
|
string updateParkingSpaceSql = "update parkingspace set parkingSpaceState = 1 where parkingSpaceID = '" + ppp.parkingSpaceID + "'";
|
|
|
- string updateFreeSpaceSql = "update garage set garageFreeSpace = '" + freeSpaceCount+ "' where garageID = '" + garageID + "'";
|
|
|
+ string updateFreeSpaceSql = "update garage set garageFreeSpace = '" + freeSpaceCount + "' where garageID = '" + garageID + "'";
|
|
|
List<string> strs = new List<string>();
|
|
|
strs.Add(updateParkingSpaceSql);
|
|
|
strs.Add(updateFreeSpaceSql);
|
|
@@ -748,12 +824,7 @@ namespace parkMonitor.server.CoreThread
|
|
|
status = 2;
|
|
|
cm.status = status;
|
|
|
cm.RobotID = robotID;//启动对应机械手
|
|
|
- ParkingBuffer pb = ParkingBufferManager.ins.MallocParkingBuffer(queueCmd.id);
|
|
|
- if (pb == null)
|
|
|
- {
|
|
|
- Rollback(queueCmd, ppp.parkingSpaceID, true, true, lmToBeReleased);
|
|
|
- return;
|
|
|
- }
|
|
|
+
|
|
|
//激光数据
|
|
|
cm.centerX = Convert.ToString(dataReal.centerX);
|
|
|
cm.centerY = Convert.ToString(dataReal.centerY);
|
|
@@ -796,7 +867,7 @@ namespace parkMonitor.server.CoreThread
|
|
|
|
|
|
//停车流程结束,将相应车牌复位,从号牌队列中出队
|
|
|
NumReset(queueCmd);
|
|
|
- Log.WriteLog(LogType.NOT_DATABASE,LogFile.LOG, "停车流程:" + queueCmd.LicenseNum + "停车完成,状态复位");
|
|
|
+ Log.WriteLog(LogType.NOT_DATABASE, LogFile.LOG, "停车流程:" + queueCmd.LicenseNum + "停车完成,状态复位");
|
|
|
UILogServer.ins.info("停车流程:" + queueCmd.LicenseNum + "停车完成,状态复位");
|
|
|
//释放机械手与激光
|
|
|
if (lmToBeReleased != null)
|
|
@@ -1048,13 +1119,13 @@ namespace parkMonitor.server.CoreThread
|
|
|
//释放机械手
|
|
|
Robot.robot1.occupied = false;
|
|
|
Robot.robot1.waitCount -= 1;
|
|
|
-
|
|
|
+
|
|
|
//释放缓冲位与车位,缓冲位ID暂用车位X代替
|
|
|
- if (ParkingSpaceManager.ins == null || !ParkingSpaceManager.ins.ReleaseParkingSpace(ps.parkingSpaceID) || ParkingBufferManager.ins == null || !ParkingBufferManager.ins.ReleaseParkingBuffer(ps.parkingSpaceX))
|
|
|
+ if (ParkingSpaceManager.ins == null || !ParkingSpaceManager.ins.SetParkingSpace(ps.parkingSpaceID, 0) || ParkingBufferManager.ins == null || !ParkingBufferManager.ins.ReleaseParkingBuffer(ps.parkingSpaceX))
|
|
|
{
|
|
|
Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, "车位异常,请检查"); UILogServer.ins.error("车位异常,请检查");
|
|
|
}
|
|
|
- Log.WriteLog(LogType.NOT_DATABASE,"取车流程:号牌:" + queueCmd.LicenseNum + "取车完成");
|
|
|
+ Log.WriteLog(LogType.NOT_DATABASE, "取车流程:号牌:" + queueCmd.LicenseNum + "取车完成");
|
|
|
UILogServer.ins.info("取车流程:号牌:" + queueCmd.LicenseNum + "取车完成");
|
|
|
|
|
|
//自动化测试用
|