using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Printing;
using SDWM.DBUtility;
using System.Data.SqlClient;
using System.Threading;
using CarQueueSys.Properties;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace CarQueueSys
{
public partial class QueueForm : Form
{
#region ---------成員變量-------------
private Thread thread = null; //刷新綁定的空間數據線程
private Thread setGQThread = null;
private delegate void Delegate_do();//委托類綁定數據委托
private Delegate_do Dele_do;
private delegate void Delegate_GQ();
private Delegate_GQ Dele_GQ;
private Object thisLock; //線程循環執行鎖
private bool isConnect = false; //是否連接數據庫
#endregion
#region ------構造函數和加載函數------
public QueueForm()
{
Control.CheckForIllegalCrossThreadCalls = false; //不捕獲對錯誤線程的調用
InitializeComponent();
thisLock = new Object();
try
{
if (common.Syris_InitComm(1) != 0) //連接控制器
{
common.Syris_DelAllIodata(09); //清空控制器數據
thread = new Thread(new ThreadStart(DoBindData));//綁定數據線程
thread.Name ="BindData";
thread.IsBackground = true; //這樣能隨主程序一起結束
thread.Start(); //開始線程
setGQThread = new Thread(new ThreadStart(DoSetGuoQI));//設置過期
setGQThread.Name = "SetGQThread";
setGQThread.IsBackground = true; //這樣能隨主程序一起結束
setGQThread.Start(); //開始線程
timer1.Start();
}
else
{
LogRecord.RecordLog("------連接控制器失敗,檢測控制器是否連接-------");
}
}
catch (Exception ex)
{
LogRecord.RecordLog(ex.Message +ex.Source+ex.InnerException+"------連接控制器失敗,檢測控制器是否連接-------");
}
}
#endregion
#region --------車輛排隊邏輯----------
#region -------------左側界面內容顯示--------
/// <summary>
/// 實時綁定
/// </summary>
public void DoBindData()
{
try
{
while (true)
{
BindData();
Thread.Sleep(8000);
}
}
catch (Exception ex)
{
LogRecord.RecordLog(ex.Message + ex.Source + ex.InnerException + "------數據綁定方法DoBindData-------");
}
}
private void DoSetGuoQI()
{
try
{
while (true)
{
SetGuoQI();
Thread.Sleep(8000);
}
}
catch (Exception ex)
{
LogRecord.RecordLog(ex.Message + ex.Source + ex.InnerException + "------數據綁定方法DoSetGuoQI-------");
}
}
/// <summary>
/// 排隊過號設置 過號狀態為-1
/// </summary>
private void SetGuoQI()
{
Dele_GQ = SetGuoQI;
Dele_GQ.BeginInvoke(null, null);
lock (thisLock)
{
try
{
//查找所有狀態為 “請進”的車輛,並判斷時間是否超過半小時
using (DataSet timeoutDS = SDWM.DBUtility.DbHelperSQL.Query("select VZid,VEndtime,vTid,Vtype from VZHU where Vzhuangt= 1"))
{
timeoutDS.Dispose();//釋放資源
}
}
catch (SqlException ex)
{
LogRecord.RecordLog(ex.Message + ex.Source + ex.InnerException + "------設置數據過期失敗-請檢查網絡連接!-------");
}
}
}//end method
/// <summary>
//end method
/// <summary>
/// 綁定灰級別
/// </summary>
private void BindData()//綁定當前車輛正在排隊車數量
{
if (this.InvokeRequired)
{
Dele_do = BindData;
this.BeginInvoke(Dele_do);
}
else
{
lock (thisLock)//防止線程死鎖
{
try
{
using (DataSet ds4 = SDWM.DBUtility.DbHelperSQL.Query("select VHID,VHName,VUseable,isVip from VHuiType "))
{
int count = ds4.Tables[0].Rows.Count;
if (count > 0)
{
for (int i = 0; i < count; i++)
{
SetPB(HName, hUseable, VHTypeID, isHvip);
SetLbData(VHTypeID, HName);
Application.DoEvents();
}
}
ds4.Dispose();
}
}
catch (Exception ex)
{
LogRecord.RecordLog(ex.Message + ex.Source + ex.InnerException + "------數據綁定BindData-------");
}
}
}
}
/// <summary>
/// 設置屏幕上顯示的按鍵狀態
/// </summary>
/// <param name="HuiName"></param>
/// <param name="isUseable"></param>
private void SetPB(string HuiName,bool isUseable,string VHTypeID,string vip)
{
try
{
switch (HuiName)
{
case "一二期原灰":
if (isUseable) { pb1.BackColor = Color.Transparent; }
else { pb1.BackColor = Color.Gray; pb1.Enabled = false; }
pb1.Enabled = isUseable;
pb1.Tag = VHTypeID + "-" + HuiName + "-" + vip; break;
case "二期細灰":
if (isUseable) { pb2.BackColor = Color.Transparent; }
else { pb2.BackColor = Color.Gray; pb2.Enabled = false; }
pb2.Enabled = isUseable;
pb2.Tag = VHTypeID + "-" + HuiName + "-" + vip; break;
case "磨機細灰":
if (isUseable) { pb3.BackColor = Color.Transparent; }
else { pb3.BackColor = Color.Gray; pb3.Enabled = false; }
pb3.Enabled = isUseable;
pb3.Tag = VHTypeID + "-" + HuiName + "-" + vip; break;
case "三期原灰":
if (isUseable) { pb4.BackColor = Color.Transparent; }
else { pb4.BackColor = Color.Gray; pb4.Enabled = false; }
pb4.Enabled = isUseable;
pb4.Tag = VHTypeID + "-" + HuiName + "-" + vip; break;
case "三期細灰":
if (isUseable) { pb5.BackColor = Color.Transparent; }
else { pb5.BackColor = Color.Gray; pb5.Enabled = false; }
pb5.Enabled = isUseable;
pb5.Tag = VHTypeID + "-" + HuiName + "-" + vip; break;
case "三期粗灰":
if (isUseable) { pb6.BackColor = Color.Transparent; }
else { pb6.BackColor = Color.Gray; pb6.Enabled = false; }
pb6.Enabled = isUseable;
pb6.Tag = VHTypeID + "-" + HuiName + "-" + vip; break;
case "二期粗灰":
if (isUseable) { pb7.BackColor = Color.Transparent; }
else { pb7.BackColor = Color.Gray; pb7.Enabled = false; }
pb7.Enabled = isUseable;
pb7.Tag = VHTypeID + "-" + HuiName + "-" + vip; break;
default: break;
}
}
catch(Exception ex)
{
LogRecord.RecordLog(ex.Message +ex.Source+ex.InnerException + "------數據綁定SetPB-------");
}
}
/// <summary>
/// 根據灰口id獲取當前灰車輛等待數量
/// </summary>
/// <param name="huiTypeID"></param>
private void SetLbData(string huiTypeID,string HuiName)
{
try
{
PrevoisNum = GetCurrWaitCar(huiTypeID).ToString();
switch (HuiName)
{
case "一二期原灰":
this.lyh.Text = PrevoisNum; break;
case "二期細灰":
this.lxh.Text = PrevoisNum; break;
case "磨機細灰":
this.lmj.Text = PrevoisNum; break;
case "三期原灰":
this.lyh3.Text = PrevoisNum; break;
case "三期細灰":
this.lxh3.Text = PrevoisNum; break;
case "三期粗灰":
this.lch.Text = PrevoisNum; break;
case "二期粗灰":
this.lb2chu.Text = PrevoisNum; break;
default: break;
}
}
catch (System.Exception ex)
{
LogRecord.RecordLog(ex.Message +ex.Source+ex.InnerException + "------數據綁定SetLbData-------");
}
}
/// <summary>
/// 根據灰口號獲取當前灰口等待的車輛
/// </summary>
/// <param name="id"></param>
private int GetCurrWaitCar(string HTypeid)
{
try
{
return Convert.ToInt32(DbHelperSQL.GetSingle("select count(VZid) from VZHU where Vzhuangt in( 0 ,1 ,2 ,4 ,7) and Vtype='" + HTypeid + "'"));
}
catch (Exception ex)
{
LogRecord.RecordLog(ex.Message +ex.Source+ex.InnerException + "------數據綁定GetCurrWaitCar-------");
return 0;
}
}
#endregion
#region --------連接控制器並開始循環讀卡---------
byte[] status = new byte[100];
byte[] status2 = new byte[100];
byte[] status1 = new byte[3];
byte[] statuse = new byte[10];
byte[] status2e = new byte[10];
byte[] byte3 = new byte[10];
string strIDs = "";
string strGetEPCid = "";
object result = null;
string currTid = string.Empty;
string vipstarttime = "";
string vipendtime = "";
string vipType="";
string huiList="";
/// <summary>
/// 控制器 循環讀卡
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer1_Tick(object sender, EventArgs e)
{
try
{
if (!isConnect)
{
return;
}
//讀取控制器中卡數據
strGetEPCid = string.Empty;
common.Syris_PollIodata(09, status);
strIDs = System.Text.Encoding.ASCII.GetString(status);
status1[0] = (byte)Convert.ToChar(strIDs.Substring(39, 1));
status1[1] = (byte)Convert.ToChar(strIDs.Substring(40, 1));
common.Syris_ReadCardID(09, status1, status2);
strGetEPCid = System.Text.Encoding.ASCII.GetString(status2);
common.Syris_DelOneIodata(09);
common.Syris_DelAllIodata(09);
if (strGetEPCid != "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0")
{
currTid = strGetEPCid.Substring(10, 4);
if (currTid != "0000" && currTid.Contains("C"))
{
#region 卡片數據操作
//通過該標簽的EPC數據檢索數據庫對應的數據
using (DataSet ds = SDWM.DBUtility.DbHelperSQL.Query("select VLicense,VUName,VipLevel,viptype,vipstarttime,vipendtime,vipHuiStr from Vehicles where VTid='" + currTid + "'"))
{
if (ds.Tables[0].Rows.Count <= 0)
{
ds.Dispose();
ResetLb();
return;
}
else
{
result = SDWM.DBUtility.DbHelperSQL.GetSingle("select count(*) from VZHU where Vzhuangt in(2,4,6) and vTid='" + currTid + "'");
if (result.ToString() != "0")
{
//非法排隊
ds.Dispose();
ResetLb();
return;
}
//顯示數據在觸摸屏上
lbCarNo.Text = ds.Tables[0].Rows[0]["VLicense"].ToString();
lbOwner.Text = ds.Tables[0].Rows[0]["VUName"].ToString();
lbData.Text = DateTime.Now.ToLocalTime().ToShortDateString();
lbTime.Text = DateTime.Now.ToLocalTime().ToLongTimeString();
vipLevel = Convert.ToInt32(ds.Tables[0].Rows[0]["VipLevel"].ToString());//一級vip還是二級vip
vipType = ds.Tables[0].Rows[0]["viptype"].ToString();//vip類型 一次性vip還是永久
huiList = ds.Tables[0].Rows[0]["vipHuiStr"].ToString();//一次性VIP可以排隊的灰口
if (vipType == "1" && vipLevel == 1)//只針對一次性VIP 進行時間段內判定
{
try
{
if (ds.Tables[0].Rows[0]["vipstarttime"] != null && ds.Tables[0].Rows[0]["vipendtime"] != null)
{
vipstarttime = ds.Tables[0].Rows[0][4].ToString();//vip開始時間
vipendtime = ds.Tables[0].Rows[0][5].ToString();//vip結束時間
DateTime starttime = Convert.ToDateTime(vipstarttime);
DateTime endtime = Convert.ToDateTime(vipendtime);
TimeSpan ts = DateTime.Now.Subtract(starttime);//獲取最新更新時間
TimeSpan te = DateTime.Now.Subtract(endtime);
if (ts.TotalMinutes < 0 || te.TotalMinutes > 0)
{
vipLevel = 0;//不在時間段內,只能當作普通車輛
}
}
}
catch
{
}//end 時間判定
}
//判斷是否已排隊
result = SDWM.DBUtility.DbHelperSQL.GetSingle("select count(*) from VZHU where Vzhuangt in(0,1,7) and vTid='" + currTid + "'");
if (result.ToString() == "0")//當前車輛沒有正在請進或者等待的排隊的信息
{
//判斷時間是否在允許范圍內 默認重新排隊時間是2小時
if (vipLevel == 0 || vipLevel == 2)// 一級vip不做時間限制
{
if (!isAllowQueue(currTid))
{
ds.Dispose();
ResetLb();
lbErrorMsg.Text = "提醒:您排隊過於頻繁,請按照規定 " + reQueueTime + " 小時后再次排隊 !";
return;
}
}//end method
#region 如果顯示觸摸屏數據,信號燈顯示為綠色 執行下面代碼
OpenLight();//開啟紅綠燈
#endregion
timer1.Stop();
SetAllPB(true);
lbErrorMsg.Text = "";
this.lbBianMa.Text = MakeStr(SDWM.DBUtility.DbHelperSQL.GetSingle("select VDaij from SConfig where Type='6'").ToString());
this.btnReQueue.Enabled = false;//禁用重新排隊
this.btnReQueue.BackColor = Color.Gray;
ds.Dispose();
common.Syris_DelAllIodata(09);
}
else
{
#region 如果顯示觸摸屏數據,信號燈顯示為綠色 執行下面代碼
OpenLight();//開啟紅綠燈
#endregion
SetAllPB(false);
btnReQueue.Enabled = true;
btnReQueue.BackColor = Color.Transparent;
ds.Dispose();
common.Syris_DelAllIodata(09);
lbErrorMsg.Text = "提醒:您已排隊,如果想重新排隊,請點擊[重新排隊]按鍵!";
}
}
}
#endregion
}
else
{
ResetLb();
}
}
else
{
ResetLb();
}
}
catch(Exception ex)
{
LogRecord.RecordLog(ex.Message +ex.Source+ex.InnerException + "-----實時獲取卡片信息timer1_Tick");
}
finally
{
System.GC.Collect();
}
}
//判斷是否可以進行再次排隊
private bool isAllowQueue(string Tid)
{
try
{
object reuslt = SDWM.DBUtility.DbHelperSQL.GetSingle(" select count(*) from VZHU where Vzhuangt !=-2 and Vzhuangt !=-1 and vTid='" + Tid + "'");
if (reuslt.ToString() != "0")
{
object time = SDWM.DBUtility.DbHelperSQL.GetSingle("select top(1) VEndtime from VZHU where Vzhuangt !=-2 and Vzhuangt !=-1 and vTid='" + Tid + "'order by VEndtime desc");
DateTime lastTime = Convert.ToDateTime(time);//獲取最新更新時間
TimeSpan ts = DateTime.Now.Subtract(lastTime);
if (ts.TotalHours >= reQueueTime)
{
return true;
}
else
{
return false;
}
}
else
{
return true;
}
}
catch(Exception ex)
{
LogRecord.RecordLog(ex.Message +ex.Source+ex.InnerException+"是否允許排隊");
throw ex;
}
}
//開啟紅綠燈
private void OpenLight()
{
try
{
//--控制器、綠燈開啟
byte3[0] = (byte)'1';
statuse[0] = (byte)'2';
status2e[0] = (byte)'0';
status2e[1] = (byte)'0';
status2e[2] = (byte)'1';
status2e[3] = (byte)'5';
common.Syris_ImmOpenDoor(09, statuse, status2e);
common.Syris_ImmOpenDoor(09, byte3, status2e);
}
catch(Exception ex)
{
LogRecord.RecordLog(ex.Message +ex.Source+ex.InnerException+"-----打開紅綠燈");
}
}
//設置界面按鍵可用狀態
private void SetAllPB(bool isAble)
{
try
{
if (isAble)
{
pb1.Click += new EventHandler(pb2_Click);
pb2.Click += new EventHandler(pb2_Click);
pb3.Click += new EventHandler(pb2_Click);
pb4.Click += new EventHandler(pb2_Click);
pb5.Click += new EventHandler(pb2_Click);
pb6.Click += new EventHandler(pb2_Click);
pb7.Click += new EventHandler(pb2_Click);
}
else
{
pb1.Click -= new EventHandler(pb2_Click);
pb2.Click -= new EventHandler(pb2_Click);
pb3.Click -= new EventHandler(pb2_Click);
pb4.Click -= new EventHandler(pb2_Click);
pb5.Click -= new EventHandler(pb2_Click);
pb6.Click -= new EventHandler(pb2_Click);
pb7.Click -= new EventHandler(pb2_Click);
}
pb1.Enabled = isAble;
pb2.Enabled = isAble;
pb3.Enabled = isAble;
pb4.Enabled = isAble;
pb5.Enabled = isAble;
pb6.Enabled = isAble;
pb7.Enabled = isAble;
}
catch(Exception ex)
{
LogRecord.RecordLog(ex.Message +ex.Source+ex.InnerException + "-----設置按鍵狀態SetAllPB");
}
}
#endregion
#region -------------打印小票信息代碼-------------
/// <summary>
/// 打印小票信息 參數有
/// </summary>
/// <param name="CarNum">前面等待的車輛數</param>
/// <param name="currTime">當前取票時間</param>
/// <param name="chepai">車牌號碼</param>
/// <param name="huiType">灰級別</param>
/// <param name="huikou">灰口號</param>
PrintPreviewDialog ppd =null;
PrintDocument pd = null;
Margins margin = null;
PaperSize pageSize = null;
private void PrintBill()
{
try
{
//此處編寫打印代碼
//打印預覽
ppd = new PrintPreviewDialog();
pd = new PrintDocument();
//設置邊距
margin = new Margins(10, 10, 10, 10);
pd.DefaultPageSettings.Margins = margin;
////紙張設置默認
pageSize = new PaperSize("First custom size", getYc(20.3), 20);
pd.DefaultPageSettings.PaperSize = pageSize;
//打印事件設置
pd.PrintPage += new PrintPageEventHandler(printDocument_PrintPage);
pd.Print();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message +ex.Source+ex.InnerException, "未安裝打印機!", MessageBoxButtons.OK, MessageBoxIcon.Error);
pd.PrintController.OnEndPrint(pd, new PrintEventArgs());
}
finally
{
ppd.Dispose();
pd.Dispose();
}
}
private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
//通過GDI+繪制打印文檔
e.Graphics.DrawString(GetPrintStr(), new Font("宋體", 12.0f), Brushes.Black, 5, -1);
}
//計算 寬度
private int getYc(double cm)
{
return (int)(cm / 25.4) * 100;
}
/// <summary>
///獲取打印字符串
/// </summary>
/// <returns></returns>
/// <param name="carNum">前面等待的車輛數</param>
/// <param name="currTime">當前取票時間</param>
/// <param name="chepai">車牌號碼</param>
/// <param name="huiType">灰級別</param>
/// <param name="huikou">灰口號</param>
StringBuilder sb = null;
private string GetPrintStr()
{
sb = new StringBuilder();
try
{
sb.Append(" 國電石橫電廠 \n");
sb.Append("---------------------------------------\n");
sb.Append("取票時間:" + this.lbData.Text + " " + this.lbTime.Text + "\n");
sb.Append("---------------------------------------\n");
sb.Append("車牌號: " + this.lbCarNo.Text + " " + "編號:" + this.lbBianMa.Text + "\n");
sb.Append("\n");
sb.Append("前面等待車輛:" + currWaitCarNum + "輛\n");
sb.Append("\n");
sb.Append("灰類型:" + currTypeName + "\n");
sb.Append("\n");
sb.Append("序號:" + this.lbXhao.Text + "\n");
sb.Append("----------------------------------------\n");
sb.Append(" 謝謝惠顧,歡迎您下次光臨 ! ");
return sb.ToString();
}
catch (System.Exception ex)
{
throw ex;
}
finally
{
sb = null;
}
}
#endregion
#region ---------用戶選擇相應的灰級別信息並打印-----------
string[] huiData;
string[] huiLists;
private void pb2_Click(object sender, EventArgs e)
{
PictureBox currPB = (PictureBox)sender;
huiData = null;
huiLists = null;
try
{
if (lbCarNo.Text == "" || lbBianMa.Text == "" || currPB.BackColor == Color.Gray)
{
return;
}
currPB.BorderStyle = BorderStyle.Fixed3D;
if (currPB.Tag.ToString() != "")
{
huiData = currPB.Tag.ToString().Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
if (huiData.Length <= 0)
{
return;
}
currHTypeID = huiData[0];
currTypeName = huiData[1];
currWaitCarNum = GetCurrWaitCar(huiData[0]); //獲取灰級別前面等待車輛
//限制VIP車輛排隊灰口,只針對VIP
if (vipLevel != 0)
{
bool canQueue = false;
huiLists = huiList.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
foreach (string hui in huiLists)
{
if (hui == currHTypeID)//是否是運行進行一級VIP排隊的
{
canQueue = true;
break;
}
}
if (!canQueue)
{
vipLevel = 0;
}
}
#region --------------根據vip級別 生成排隊虛編號-------------
if (vipLevel == 1)//一級vip排隊
{
currHBM = -1;
currXBM = CreateXubian(-1, Convert.ToInt32(currHTypeID), Inveval);
lbXhao.Text = MakeHXStr(currHTypeID, vipLevel);
}
else if (vipLevel == 2)//二級vip排隊
{
currHBM = 0;
currXBM = CreateXubian(0, Convert.ToInt32(currHTypeID), Inveval);
lbXhao.Text = MakeHXStr(currHTypeID, vipLevel);
}
else//普通用戶排隊
{
if (huiData[2] == "1")//如果不是vip專用灰口
{
currXBM = CreateXubian(1, Convert.ToInt32(currHTypeID), Inveval);
currHBM = Convert.ToInt32(currXBM) / 100;
this.lbXhao.Text = MakeHXStr(currHTypeID, vipLevel);
}
else
{
//如果是vip專用口 不執行
lbErrorMsg.Text = "此灰口暫時不開放,請更換!";
ResetLb();
timer1.Start();
return;
}
}
#endregion
///打印當前信息
if (MessageBox.Show("您是否確定要進入排隊", "打印提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No)
{
ResetLb();
timer1.Start();
return;
}
else
{
updateData();//往數據庫更新數據,並打印
BindData();
System.GC.Collect();
}
}
}
catch(Exception ex)
{
LogRecord.RecordLog(ex.Message +ex.Source+ex.InnerException+"-----點擊按鍵排隊");
}
finally
{
System.GC.Collect();
}
}
/// <summary>
/// 當用戶點擊選擇時,打印小票
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
StringBuilder strSql = null;
private void updateData()
{
try
{
//將記錄寫入當天的數據表中
strSql = new StringBuilder();
strSql.Append("insert into VZHU(");
strSql.Append("vTid,Vtype,Vzhuangt,VStrtime,VEndtime,VXhao,VBianMa,VHXhao,VHAll,VX)");
strSql.Append(" values (");
strSql.Append("@vTid,@Vtype,@Vzhuangt,@VStrtime,@VEndtime,@VXhao,@VBianMa,@VHXhao,@VHAll,@VX)");
strSql.Append(";select @@IDENTITY");
SqlParameter[] parameters = {
new SqlParameter("@vTid", SqlDbType.VarChar,50),
new SqlParameter("@Vtype", SqlDbType.VarChar,50),
new SqlParameter("@Vzhuangt", SqlDbType.Int,4),
new SqlParameter("@VStrtime", SqlDbType.DateTime,8),
new SqlParameter("@VEndtime", SqlDbType.DateTime,8),
new SqlParameter("@VXhao", SqlDbType.VarChar,50),
new SqlParameter("@VBianMa", SqlDbType.Int,4),
new SqlParameter("@VHXhao", SqlDbType.Int,4),
new SqlParameter("@VHAll", SqlDbType.Int,4),
new SqlParameter("@VX", SqlDbType.VarChar,50)
};
parameters[0].Value = currTid;
parameters[1].Value = currHTypeID;
parameters[2].Value = "0";
parameters[3].Value = DateTime.Now.ToLocalTime();
parameters[4].Value = DateTime.Now.ToLocalTime();
parameters[5].Value = this.lbBianMa.Text;
parameters[6].Value = currXBM;//排隊編碼例如 240
parameters[7].Value = currHBM;//灰口編碼 1
parameters[8].Value = isTongZhuang(currHTypeID);
parameters[9].Value = this.lbXhao.Text.Trim();//LED第一列 顯示序號
int obj = DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);
if (obj > 0)
{
SDWM.DBUtility.DbHelperSQL.ExecuteSql("update SConfig set VDaij ='" + lbBianMa.Text + "' where Type='6'");
carStatus(currHTypeID);//判斷是否廠區外有提升的車輛
//PrintBill(); //打印小票 前面等待人數,當前系統時間,當前車牌,選擇灰級別,當前灰口-------------------------------暫停打印功能------------------------------
}
ResetLb();
Application.DoEvents();
common.Syris_DelAllIodata(09);
parameters = null;
strSql = null;
timer1.Start();
}
catch (Exception ex)
{
LogRecord.RecordLog(ex.Message +ex.Source+ex.InnerException+"---------排隊完成后更新數據庫信息");
}
}
/// <summary>
/// 生成vip虛編碼
/// </summary>
/// <param name="VHXhao">當前灰排隊編號 -1是一級vip 0是二級vip</param>
/// <param name="Vtype">灰型id</param>
/// <param name="InvevalNum">vip間隔</param>
/// <returns>生成排隊編碼</returns
private string CreateXubian(int VHXhao, int Vtype, int InvevalNum)
{
try
{
SqlParameter[] parameters = {
new SqlParameter("@VHXhao", SqlDbType.Int,4),
new SqlParameter("@Vtype", SqlDbType.Int,4),
new SqlParameter("@VInvevalNum", SqlDbType.Int,4),
new SqlParameter("@VBianMa", SqlDbType.Int,4)
};
parameters[0].Value = VHXhao;//
parameters[0].Direction = ParameterDirection.Input;
parameters[1].Value = Vtype;
parameters[1].Direction = ParameterDirection.Input;
parameters[2].Value = InvevalNum;
parameters[2].Direction = ParameterDirection.Input;
parameters[3].Direction = ParameterDirection.Output;
SDWM.DBUtility.DbHelperSQL.RunProcedure("CreateBianma", parameters);
return parameters[3].Value.ToString();
}
catch(Exception ex)
{
LogRecord.RecordLog(ex.Message +ex.Source+ex.InnerException+"------生成排隊編碼");
return "0";
}
}
//判斷當前灰型是否通裝
private string isTongZhuang(string huiTypeID)
{
try
{
boolSql = "SELECT Useable FROM FHuiType WHERE id IN (SELECT FHuiID FROM VHuiType WHERE VHID='" + huiTypeID + "')";
if (SDWM.DBUtility.DbHelperSQL.GetSingle(boolSql) != null)
{
isTongZ = SDWM.DBUtility.DbHelperSQL.GetSingle(boolSql).ToString();
return isTongZ;
}
else
{
return "1";//1表示不可以統裝,0表示不可以統裝
}
}
catch(Exception ex)
{
LogRecord.RecordLog(ex.Message +ex.Source+ex.InnerException+"---是否統裝");
throw ex;
}
}
/// <summary>
/// </summary>
/// <param name="htypeID"></param>
//設置灰口排隊車輛狀態前進
private void carStatus(string htypeID)
{
try
{
//父級灰id
string huiFjID = SDWM.DBUtility.DbHelperSQL.GetSingle("select FHuiID from VHuiType where VHID='" + htypeID + "'").ToString();//原始灰機
//判斷當前灰類是否處於等待模式
string res = SDWM.DBUtility.DbHelperSQL.GetSingle("select isWaitMode from FHuiType where id='" + huiFjID + "'").ToString();
if (res == "1")//如果處於等待模式,不進行任何操作 如果不處於等待模式,則進行下一個車輛更新為請進
{
boolSql = "select maxCar from VHuiType where VHID='" + htypeID + "' and maxCar <= (select count(*) from VZHU where Vzhuangt>=1 and Vzhuangt <5 and Vtype='" + htypeID + "')";
if (SDWM.DBUtility.DbHelperSQL.GetSingle(boolSql) == null)
{
object sql = SDWM.DBUtility.DbHelperSQL.GetSingle("select top(1) vzid from VZHU where Vzhuangt=0 and Vtype='" + htypeID + "' order by VBianMa asc");
if (sql != null)
{
SDWM.DBUtility.DbHelperSQL.ExecuteSql("update VZHU set Vzhuangt='1' ,VEndtime= '" + DateTime.Now.ToLocalTime() + "' where Vzhuangt='0' and Vtype='" + htypeID + "'and vzid='" + sql.ToString() + "'");
}
}
}
}
catch (Exception ex)
{
LogRecord.RecordLog(ex.Message +ex.Source+ex.InnerException+"----車輛狀態設置");
}
finally
{
htypeID = null;
}
}
#endregion
#region------------生成排隊號碼和其他操作----------------
#region 生成字符串的灰口排隊號
string NewNo = string.Empty;
int len;
//生成編碼
private string MakeStr(string curStr)
{
try
{
NewNo = string.Empty;
NewNo = (Convert.ToInt32(curStr) + 1).ToString();
len = NewNo.Length;
if (len <= 5)
{
for (int i = 0; i < 5 - len; i++)
{
NewNo = "0" + NewNo;
}
}
else
{
NewNo = "00001";
SDWM.DBUtility.DbHelperSQL.ExecuteSql("update SConfig set VDaij='00001' where Type='6'");
}
return NewNo;
}
catch (Exception ex)
{
LogRecord.RecordLog(ex.Message +ex.Source+ex.InnerException+"---------生成編碼");
throw ex;
}
}
//生成顯示序號
private string MakeHXStr(string typeID,int level)
{
object maxVX;
NewNo = string.Empty;
try
{
if (level == 1)//一級VIP設置
{
maxVX = SDWM.DBUtility.DbHelperSQL.GetSingle("select top(1) VX from VZHU where Vtype='" + typeID + "' and VHXhao=-1 order by Vstrtime desc");
if (maxVX != null)
{
NewNo = (Convert.ToInt32(maxVX) + 1).ToString();
len = NewNo.Length;
if (len <= 3)
{
for (int i = 0; i < 3 - len; i++)
{
NewNo = "0" + NewNo;
}
}
if (NewNo.Substring(1, 2) != "00")
{
NewNo = "1" + NewNo.Substring(1, 2);
}
else
{
NewNo = "101";
}
}
else
{
NewNo = "101";
}
}
else if (level == 2)
{
maxVX = SDWM.DBUtility.DbHelperSQL.GetSingle("select top(1) VX from VZHU where Vtype='" + typeID + "' and VHXhao=0 order by Vstrtime desc");
if (maxVX != null)
{
NewNo = (Convert.ToInt32(maxVX) + 1).ToString();
len = NewNo.Length;
if (len <= 3)
{
for (int i = 0; i < 3 - len; i++)
{
NewNo = "0" + NewNo;
}
}
if (NewNo.Substring(1, 2) != "00")
{
NewNo = "2" + NewNo.Substring(1, 2);
}
else
{
NewNo = "201";
}
}
else
{
NewNo = "201";
}
}
else
{
maxVX = SDWM.DBUtility.DbHelperSQL.GetSingle("select top(1) VX from VZHU where Vtype='" + typeID + "' and VHXhao >0 order by Vstrtime desc");
if (maxVX != null)
{
NewNo = (Convert.ToInt32(maxVX) + 1).ToString();
len = NewNo.Length;
if (len <= 3)
{
for (int i = 0; i < 3 - len; i++)
{
NewNo = "0" + NewNo;
}
}
if (NewNo.Substring(1, 2) != "00")
{
NewNo = "0" + NewNo.Substring(1, 2);
}
else
{
NewNo = "001";
}
}
else
{
NewNo = "001";
}
}
return NewNo;
}
catch(Exception ex)
{
LogRecord.RecordLog(ex.Message +ex.Source+ex.InnerException + "------灰口序號MakeHXStr");
throw ex;
}
}
#endregion
private void pb2_MouseClick(object sender, MouseEventArgs e)
{
try
{
PictureBox currPB = (PictureBox)sender;
currPB.BorderStyle = BorderStyle.None;
}
catch (Exception ex)
{
LogRecord.RecordLog(ex.Message +ex.Source+ex.InnerException+"----樣式設置");
}
}
//清空界面顯示
private void ResetLb()
{
try
{
strGetEPCid = null;
currTid = "";
lbCarNo.Text = "";
lbData.Text = "";
lbOwner.Text = "";
lbBianMa.Text = "";
lbTime.Text = "";
lbXhao.Text = "";
lbErrorMsg.Text = "";
common.Syris_DelOneIodata(09);
common.Syris_DelAllIodata(09);
System.GC.Collect();
}
catch(Exception ex)
{
LogRecord.RecordLog(ex.Message +ex.Source+ex.InnerException + "----清空顯示");
}
}
//重新排隊 重新排隊的狀態為-2
private void btnReQueue_Click(object sender, EventArgs e)
{
//刪除當前排隊信息
try
{
if (currTid != "" && this.lbCarNo.Text != "")
{
if (MessageBox.Show("您是否確定要重新排隊?","重新排隊提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning)== DialogResult.Yes)
{
carStatusSet(currTid, currHTypeID);//從新排隊,更改狀態
SDWM.DBUtility.DbHelperSQL.ExecuteSql("update VZHU set Vzhuangt='-2',VEndtime='" + DateTime.Now.ToLocalTime() + "' where vTid='" + currTid + "'and (Vzhuangt='0' or Vzhuangt='1' or Vzhuangt='7')");
ResetLb();
lbErrorMsg.Text = "";
}
}
BindData();
common.Syris_DelAllIodata(09);
timer1.Start();
}
catch(Exception ex)
{
LogRecord.RecordLog(ex.Message +ex.Source+ex.InnerException + "----重新排隊");
}
}
//讓下一輛車處於 請進狀態
private void carStatusSet(string tid,string htypeID)
{
lock (thisLock)
{
try
{
using (DataSet ds1 = SDWM.DBUtility.DbHelperSQL.Query("select Vtype,VXhao,VBianMa from VZHU where Vzhuangt='1' and vTid='" + tid + "'"))
{
if (ds1.Tables[0].Rows.Count <= 0)
{
ds1.Dispose();
return;
}
else
{
//父級灰id
string huiFjID = SDWM.DBUtility.DbHelperSQL.GetSingle("select FHuiID from VHuiType where VHID='" + htypeID + "'").ToString();//原始灰機
//判斷當前灰類是否處於等待模式
string res = SDWM.DBUtility.DbHelperSQL.GetSingle("select isWaitMode from FHuiType where id='" + huiFjID + "'").ToString();
if (res == "1")//如果處於等待模式,不進行任何操作 如果不處於等待模式,則進行下一個車輛更新為請進
{
boolSql = "select maxCar from VHuiType where VHID='" + htypeID + "' and maxCar <= (select count(*) from VZHU where Vzhuangt>=1 and Vzhuangt <5 and Vtype='" + htypeID + "'and vTid !='" + tid + "')";
if (SDWM.DBUtility.DbHelperSQL.GetSingle(boolSql) == null)
{
object sql = SDWM.DBUtility.DbHelperSQL.GetSingle("select top(1) vzid from VZHU where Vzhuangt=0 and Vtype='" + htypeID + "' order by VBianMa asc");
if (sql != null)
{
SDWM.DBUtility.DbHelperSQL.ExecuteSql("update VZHU set Vzhuangt='1' ,VEndtime= '" + DateTime.Now.ToLocalTime() + "' where Vzhuangt='0' and Vtype='" + htypeID + "'and vzid='" + sql.ToString() + "'");
}
}
}
ds1.Dispose();
}
}
}
catch (Exception ex)
{
LogRecord.RecordLog(ex.Message + ex.Source + ex.InnerException + "----設置車輛排隊狀態");
}
}
}
//重新獲取卡號
private void btnReGet_Click(object sender, EventArgs e)
{
try
{
ResetLb();
lbErrorMsg.Text = "";
common.Syris_DelAllIodata(09);
timer1.Start();
}
catch (Exception ex)
{
LogRecord.RecordLog(ex.Message +ex.Source+ex.InnerException + "----重新獲取卡號");
}
}
#endregion
#endregion
#region -----------內存優化-----------
/// <summary>
/// 將當前進程的內存占用尺寸設置到最小
/// </summary>
/// <returns>0為成功,-1為失敗</returns>
public static int SetProcessMemoryToMin()
{
return SetProcessMemoryToMin(Process.GetCurrentProcess().Handle);
}
/// <summary>
/// 將內存占用尺寸設置到最小
/// </summary>
/// <param name="SetProcess">需要設置內存使用范圍的程序進程句柄,一般為當前進程, 如:System.Diagnostics.Process.GetCurrentProcess().Handle</param>
/// <returns>0為成功,-1為失敗</returns>
public static int SetProcessMemoryToMin(IntPtr SetProcess)
{
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
return SetProcessWorkingSetSize(SetProcess, -1, -1);
}
else
{
return -1;
}
}
[DllImport("kernel32.dll")]
private static extern int SetProcessWorkingSetSize(IntPtr hProcess, int dwMinimumWorkingSetSize, int dwMaximumWorkingSetSize);
#endregion
}
}