//排队车辆被点击
private void OrderToolStripMenuItem_Click(object sender, EventArgs e)
{
//每5秒刷新一次会导致选中的节点刷新获取不到所以在右键的时候把timer禁用
isUpdatOrAdd = false;
isShow = 1;
//修改数据状态
try
{
if (DragWho == 1)
{
updatContextMenu(tvQueuing);
updateTransportorder_proc(DragWho);
}
if (DragWho == 2)
{
updatContextMenu(tvDeparture);
updateTransportorder_proc(DragWho);
}
if (DragWho == 3)
{
updatContextMenu(tvPause);
updateTransportorder_proc(DragWho);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//右键菜单的时候排队车辆tv点击右键修改为出站,
//1将点击的数据的类型修改,排序顺序修改,再移除节点从排队的tv
//2再把修改的节点加上,再重新排序
public void updatContextMenu(TreeView tv)
{
try
{
if (tv.SelectedNode.Text != null)
{
string tests = tv.SelectedNode.Text;
//根据节点的车号查找对应的车id
DataTable dt = YieldTransitEditBus.getTinByNo(tests);
if (dt != null && dt.Rows.Count > 0)
{
tin.ID = Convert.ToInt32(dt.Rows[0]["ID"].ToString());
if (isShow == 1)//代表右键选中的是将数据从其他的类型修改为排队类型
{
//类型最大的排序+1
string sqlMax = "SELECT max (VehicleOrder_ID) as VehicleOrder_ID from EMTinCar where VehicleStateType_ID=" + isShow;
string MaxValue = Common.Conn.SqlHelper.getSqlValue(sqlMax);
int Maxvalues = 0;
if (!string.IsNullOrEmpty(MaxValue))
{
Maxvalues = Convert.ToInt32(MaxValue) + 1;
}
else {
Maxvalues = 1;//可能被清理光了,再重新走一下跟新车辆一样的排序过程
}
tin.VehicleOrder_ID = Maxvalues;
tin.VehicleStateType_ID = 1;
//老的类型数据tv节点移除,新的类型数据tv节点新增
ContestMRemoveOrAddNode();
YieldTransitEditBus.updateemtin(tin);
lblMessages.Visible = true;
lblMessages.Text = "提示:" + tests + "号车已修改为排队车辆";
}
if (isShow == 2)
{
string sqlMax = "SELECT max (VehicleOrder_ID)as VehicleOrder_ID from EMTinCar where VehicleStateType_ID=" + isShow;
string MaxValue = Common.Conn.SqlHelper.getSqlValue(sqlMax);
int Maxvalues = 0;
if (!string.IsNullOrEmpty(MaxValue))
{
Maxvalues = Convert.ToInt32(MaxValue) + 1;
}
else
{
Maxvalues = 1;
}
//把累计的赋值VehicleOrder_ID,新建一条数据到这个类型下面
tin.VehicleOrder_ID = Maxvalues;
tin.VehicleStateType_ID = 2;
ContestMRemoveOrAddNode();
YieldTransitEditBus.updateemtin(tin);
lblMessages.Visible = true;
lblMessages.Text = "提示:" + tests + "号车已修改为出站车辆";
}
//右键了暂停类型
if (isShow == 3)
{
//根据类型查询这个类型最大的排序编号+1
string sqlMax = "SELECT max (VehicleOrder_ID)as VehicleOrder_ID from EMTinCar where VehicleStateType_ID=" + isShow;
string MaxValue = Common.Conn.SqlHelper.getSqlValue(sqlMax);
int Maxvalues = 0;
if (!string.IsNullOrEmpty(MaxValue))
{
Maxvalues = Convert.ToInt32(MaxValue) + 1;
}
else
{
Maxvalues = 1;
}
//把累计的赋值VehicleOrder_ID,新建一条数据到这个类型下面
tin.VehicleOrder_ID = Maxvalues;
tin.VehicleStateType_ID = 3;
ContestMRemoveOrAddNode();
YieldTransitEditBus.updateemtin(tin);
lblMessages.Visible = true;
lblMessages.Text = "提示:" + tests + "号车已修改为暂停车辆";
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
#region 通用刷新右键和拖拽移动节点方式
public void ContestMRemoveOrAddNode()
{
//老的tv节点移除,新的tv节点新增
if (DragWho == 1)//操作排队tv的情况分二种
{
if (isShow == 2)
{
RemoveOrAddNode(tvQueuing, tvDeparture);//操作排队车辆将数据从排队修改为出站
} if (isShow == 3)
{
RemoveOrAddNode(tvQueuing, tvPause);
}
}
if (DragWho == 2)
{
if (isShow == 1)
{
RemoveOrAddNode(tvDeparture,tvQueuing );
} if (isShow == 3)
{
RemoveOrAddNode(tvDeparture, tvPause);
}
}
if (DragWho == 3)
{
if (isShow == 2)
{
RemoveOrAddNode(tvPause, tvDeparture);
} if (isShow == 1)
{
RemoveOrAddNode(tvPause, tvQueuing);
}
}
}
#endregion
/// <summary>
/// 移除或者新增节点
/// </summary>
/// <param name="tvOldCheck">点击所在的节点移除</param>
/// <param name="tvNewUpdate">要修改的为某个类型的节点新增</param>
public void RemoveOrAddNode(TreeView tvOldCheck, TreeView tvNewUpdate)
{
tvNewUpdate.Nodes.Add(tvOldCheck.SelectedNode.Text);
tvOldCheck.Nodes.Remove(tvOldCheck.SelectedNode);
}
/// <summary>
/// 比如排队车辆修改为暂停车辆时,排队车辆自己的排序自己重新刷新
/// </summary>
/// <param name="OldVehicleStateType_ID">从另一种状态修改为另一个状态时,老的状态值</param>
public void updateTransportorder_proc(int OldVehicleStateType_ID)
{
//获取修改之前的状态值
//然后在之前的类型代表数据已经移动走了,那排序字段重新赋值排序
string TransportorderSQL = string.Format("exec UpdateTransportorder_proc {0}", OldVehicleStateType_ID);
string strMessage = Common.Conn.SqlHelper.ExecSql(TransportorderSQL);
if (strMessage != string.Empty)
{
return;
}
}
---当运送单新建成功后排队车辆及时修改为出站状态,
--本身的排序重新刷新
CREATE proc UpdateTransportorder_proc
@OldVehicleStateType_ID int --修改之前的车辆类型
as
declare UpdateTransportorder_cursor cursor scroll for --声明一个游标
--要循环的结果集
SELECT ID ,VehicleStateType_ID from(
SELECT ID ,VehicleStateType_ID,isnull(a.ReturnTime,getdate()) ReturnTime from EMTinCar
LEFT JOIN (
SELECT max(yt.ID) AS YtID,et.NO,max(ReturnTime) ReturnTime,yt.EMTinCar_ID from YieldTransit yt
INNER JOIN EMTinCar et on yt.EMTinCar_ID =et .ID
left JOIN YieldTransitReturn on yt.ID=YieldTransitReturn.YieldTransit_ID
group BY et.NO ,yt.EMTinCar_ID
) a ON EMTinCar_ID=EMTinCar.ID
where VehicleStateType_ID=@OldVehicleStateType_ID) aa order by ReturnTime ASC
-- --要循环的结果集 应该是修改排序之后再重新赋初始值
--SELECT ID ,VehicleStateType_ID FROM EMTinCar WHERE VehicleStateType_ID=2
open UpdateTransportorder_cursor --打开游标
declare @ID INT ,@VehicleStateType_ID INT,@VehicleOrder_ID INT
set @VehicleOrder_ID=1--首先为1
FETCH first from UpdateTransportorder_cursor into @ID,@VehicleStateType_ID
WHILE @@fetch_status=0 --提取成功,进行下一条数据的提取操作
begin
Update EMTinCar Set VehicleOrder_ID=@VehicleOrder_ID Where ID=@ID --修改行
set @VehicleOrder_ID=@VehicleOrder_ID+1
fetch next from UpdateTransportorder_cursor into @ID,@VehicleStateType_ID --移动游标字段必须跟查询的结果集一致
end
CLOSE UpdateTransportorder_cursor
DEALLOCATE UpdateTransportorder_cursor
--exec UpdateTransportorder_proc 1