using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CoreFS.CA06;
using System.Windows.Forms;
using Core.Mes.Client.Common;
using System.Collections;
using Core.LgMes.Client.lgClassModel;
using System.Data;
using Core.LgMes.Client.Comm;
/***文档注释***********************************************
* 作者 : 刘现
* 创建日期 : 2011.02.18
* 描述 : 完成作业管理手动操作,更新功能
* 注意事项 : 所有作业管理手动操作共用
* 遗留BUG : 无
* 修改日期 :
* 修改人员 :
* 修改内容 :
***********************************************************/
namespace Core.LgMes.Client.LgJobMgt
{
public class ClassManualOperate
{
private static CommandClass _commClass; //消息发送类
private static OpeBase obMain = null; //平台服务端URL
public static string strPosInfo = "3"; //互岗位信息标志
public static ArrayList arryHeatNo = new ArrayList(); //各工位加热处理号
///
/// 作业管理手动操作入口函数
///
/// 加热处理号
/// 原始位置,例:BOF01_DEVICE
/// 平台服务端URL
public static void ManualOperateEntrance(string strHeatProcessNo, string strOldPos, OpeBase ob, TrackObjectInfo objTrack)
{
//操作命令类型(OUTSTEEL:出钢,GONEXT:出下道工序,ASSIGNPOS:指定位置,
// INPOS:进站/上台,OUTPOS:出站/下台,POSTRADE:位置对换,
// OPNCAST:开浇,STOPCAST:停浇,OVER:强制结束,SWITCH:切换信息显示,ISRS:钢水回炉)
string strOptCommandType = "";
string strObjectPos = ""; //目标位置
string strOptcaption = ""; //操作说明
string strStation = ""; //岗位,例:BOF01
string strNormalOpt = ""; //操作类型
if (strHeatProcessNo == "") return;
obMain = ob; //平台服务端URL
frmManualOperate frm = new frmManualOperate();
frm.Location = CStaticMethod.GetChildWindowLocation(frm.Size);
frm.strStationCode = strOldPos.Substring(0, 3);
frm.strOldPos = strOldPos.Substring(6, strOldPos.Length - 6);
frm.ob = ob;
frm.ShowDialog();
_commClass = new CommandClass(); //实例化命令执行类
//操作命令信息
strOptCommandType = frm.strOptcommandType;
strObjectPos = frm.strObjectPos;
strOptcaption = frm.strOptcaption;
strStation = strOldPos.Substring(0, 5);
strNormalOpt = frm.strNormalOpt;
_commClass.obComm = ob;
if (strOptCommandType != "")
{
switch (strOptCommandType)
{
case "OUTSTEEL": //出钢
OutSteelOperate(strHeatProcessNo, strOldPos, strStation + strObjectPos, strOptcaption);
break;
case "GONEXT": //出下道工序
GoNextOperate(strHeatProcessNo, strOldPos);
break;
case "ASSIGNPOS": //指定具体位置
if (strNormalOpt == "1")
AssignPosOperate(strHeatProcessNo, strOldPos, strStation + strObjectPos, strOptcaption);
else
AssignPosOperate(strHeatProcessNo, strOldPos, strObjectPos, strOptcaption);
break;
case "INPOS": //进站/上台
InPosOperate(strHeatProcessNo, strOldPos, objTrack);
break;
case "OUTPOS": //出站/下台
OutPosOperate(strHeatProcessNo, strOldPos);
break;
case "POSTRADE": //位置对换
PostradeOperate(strHeatProcessNo, strOldPos);
break;
case "OPNCAST": //开浇
SetManualOperateValue(strHeatProcessNo, "OPNCAST");
break;
case "STOPCAST": //停浇
SetManualOperateValue(strHeatProcessNo, "STOPCAST");
break;
case "OVER": //强制结束
OverOperate(strHeatProcessNo, strOldPos, strStation + strObjectPos, strOptcaption);
break;
case "ISRS": //回炉钢水
IsRsOperate(strHeatProcessNo, strOldPos, strStation + strObjectPos, strOptcaption);
break;
case "SWITCH": //切换岗位信息
switch (strObjectPos)
{
case "_FRONT":
strPosInfo = "1";
break;
case "_BACK":
strPosInfo = "2";
break;
case "_DEVICE":
strPosInfo = "3";
break;
case "_DEVICE2":
strPosInfo = "4";
break;
default:
break;
}
break;
default:
break;
}
}
}
///
/// 出钢手动操作
///
/// 加热处理号
/// 原始位置,例:BOF01_DEVICE
/// 目标位置,例:BOF01_BACK
/// 目标名称
private static void OutSteelOperate(string strHeatProcessNo, string strOldPos, string strObjectPos, string strOptcaption)
{
string strMsg = ""; //提示信息
string strPosID = strOldPos.Substring(4, 1);
string strPosName = CStaticMethod.analysChineseName(strOldPos.Substring(0, 3));
strMsg = "熔炼号: " + CStaticMethod.getSmeltingID(strHeatProcessNo) +
" 正常从吹炼位到出钢位 \n 是否确认?";
if (MessageBox.Show(strMsg, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
{
_commClass.setHeatID(strHeatProcessNo);
_commClass.goNextPosCvtCmmd(strOldPos, strObjectPos);
//设置作业管理手动操作时间节点值
SetManualOperateValue(strHeatProcessNo, "OUTSTEEL");
}
}
///
/// 去下道工序手动操作
///
/// 加热处理号
/// 原始位置,例:BOF01_DEVICE
private static void GoNextOperate(string strHeatProcessNo, string strOldPos)
{
string strMsg = "";
string strNextPos = GetNextPos(strHeatProcessNo);
if (strNextPos != "")
{
strMsg = "熔炼号:" + CStaticMethod.getSmeltingID(strHeatProcessNo) + " 正常从 " +
strOldPos.Substring(4, 1) + "#" + CStaticMethod.analysChineseName(strOldPos) +
" 去下道工序(" + strNextPos.Substring(4, 1) + "#" + CStaticMethod.analysChineseName(strNextPos) + ") \n 是否确认?";
if (MessageBox.Show(strMsg, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
{
_commClass.setHeatID(strHeatProcessNo);
_commClass.goNextPosCvtCmmd(strOldPos, strNextPos);
//设置作业管理手动操作时间节点值
SetManualOperateValue(strHeatProcessNo, "GONEXT");
}
}
}
///
/// 根据作业路线获取下道工序
///
/// 加热处理号
/// 下道工序LFS01_IDLE
private static string GetNextPos(string strHeatProcessNo)
{
string strErr = "";
ArrayList arry = new ArrayList();
string strNextPos = "";
arry.Add(CStaticMethod.getSmeltingID(strHeatProcessNo));//炉号
arry.Add(strHeatProcessNo.Substring(0, 1)); //岗位号
CommonClientToServer ccs = new CommonClientToServer();
ccs.ob = obMain;
//查询作业手动操作配置信息
CoreClientParam ccp = ccs.ExecuteClietnToServer("Core.LgMes.Server.LgJobMgt.ClassManualOperate",
"GetNextPos", arry, out strErr);
if (strErr != "")
MessageBox.Show("获取下道工序失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
if (ccp.ReturnObject != null)
{
ArrayList arrl = (ArrayList)ccp.ReturnObject;
//判断下道工序IDLE是否有炉号
if (arrl[1] == null)
strNextPos = arrl[0].ToString();
else
MessageBox.Show(arrl[0].ToString().Substring(4, 1) + "#" +
CStaticMethod.analysChineseName(arrl[0].ToString()) +
"缓冲位有任务生产,请稍候再试!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
return strNextPos;
}
///
/// 指定具体工序位置操作
///
/// 加热处理号
/// 原始位置,例:BOF01_DEVICE
/// 目标位置,例:BOF01_BACK
/// 目标名称
private static void AssignPosOperate(string strHeatProcessNo, string strOldPos, string strObjectPos, string strOptcaption)
{
string strMsg = ""; //提示信息
string strPosID = strOldPos.Substring(4, 1);
string strPosName = CStaticMethod.analysChineseName(strOldPos.Substring(0, 3)) + CStaticMethod.analysPosName(strOldPos);
if (strOldPos.Contains("HMP"))
strMsg = "脱硫号: " + CStaticMethod.getHudwIdID(strHeatProcessNo) + " 异常从 " + strPosID + "#" + strPosName +
" 去 " + strOptcaption + " \n 是否确认?";
else
strMsg = "熔炼号: " + CStaticMethod.getSmeltingID(strHeatProcessNo) + " 异常从 " + strPosID + "#" + strPosName +
" 去 " + strOptcaption + " \n 是否确认?";
if (MessageBox.Show(strMsg, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
{
//判断指定工序缓冲位是否有炉号
if (!IsExistNextPosIDLE(strObjectPos)) return;
_commClass.setHeatID(strHeatProcessNo);
_commClass.goNextPosCvtCmmd(strOldPos, strObjectPos);
//设置作业管理手动操作时间节点值
SetManualOperateValue(strHeatProcessNo, "ASSIGNPOS");
}
}
///
/// 进站手动操作
///
/// 加热处理号
/// 原始位置,例:BOF01_DEVICE
/// 目标位置,例:BOF01_BACK
/// 目标名称
private static void InPosOperate(string strHeatProcessNo, string strOldPos, TrackObjectInfo objTrack)
{
string strObjectPos = ""; //目标位置
string strMsg = ""; //提示信息
bool blIdle = false;
//处理位
RealDataTrackObjectInfor objTrackDev = (RealDataTrackObjectInfor)objTrack.hList[strOldPos.Substring(0, 5) + "_DEVICE"];
//等待位
RealDataTrackObjectInfor objTrackFrt = (RealDataTrackObjectInfor)objTrack.hList[strOldPos.Substring(0, 5) + "_FRONT"];
//判断处理位是否有炉号,没有炉号直接进站到处理位
if (!string.IsNullOrEmpty(objTrackDev.OBJECTID) && string.IsNullOrEmpty(objTrackFrt.OBJECTID))
{
blIdle = true;
strObjectPos = strOldPos.Substring(0, 5) + "_FRONT";
}
else if (string.IsNullOrEmpty(objTrackDev.OBJECTID))
{
strObjectPos = strOldPos.Substring(0, 5) + "_DEVICE";
}
else
{
MessageBox.Show("处理位正在生产不能进站,待出站后再操作进站!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
return;
}
strMsg = "熔炼号: " + CStaticMethod.getSmeltingID(strHeatProcessNo) + " 正常从 " +
CStaticMethod.analysPosName(strOldPos) + " 进站去 " + CStaticMethod.analysPosName(strObjectPos) + " \n 是否确认?";
if (MessageBox.Show(strMsg, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
{
//处理处理有炉号,IDLE位加载到等待位的情况
if (blIdle == true)
{
RealDataTrackObjectInfor objTrackIDLE = (RealDataTrackObjectInfor)objTrack.hList[strOldPos.Substring(0, 5) + "_IDLE"];
_commClass.setHeatID(objTrackIDLE.OBJECTID);
}
else
_commClass.setHeatID(strHeatProcessNo);
_commClass.goNextPosCvtCmmd(strOldPos, strObjectPos);
//设置作业管理手动操作时间节点值
SetManualOperateValue(strHeatProcessNo, "INPOS");
}
}
///
/// 出站手动操作
///
/// 加热处理号
/// 原始位置,例:BOF01_DEVICE
private static void OutPosOperate(string strHeatProcessNo, string strOldPos)
{
string strMsg = "";
string strNextPos = GetNextPos(strHeatProcessNo);
if (strNextPos != "")
{
strMsg = "熔炼号:" + CStaticMethod.getSmeltingID(strHeatProcessNo) + " 正常从 " +
strOldPos.Substring(4, 1) + "#" + CStaticMethod.analysChineseName(strOldPos) +
" 出站去(" + strNextPos.Substring(4, 1) + "#" + CStaticMethod.analysChineseName(strNextPos) + ") \n 是否确认?";
if (MessageBox.Show(strMsg, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
{
_commClass.setHeatID(strHeatProcessNo);
_commClass.goNextPosCvtCmmd(strOldPos, strNextPos);
//设置作业管理手动操作时间节点值
SetManualOperateValue(strHeatProcessNo, "OUTPOS");
}
}
}
///
/// 位置对换手动操作
///
/// 加热处理号
/// 原始位置,例:BOF01_DEVICE
private static void PostradeOperate(string strHeatProcessNo, string strOldPos)
{
string[] bufferArray = { "", "", "", "" };
bufferArray[0] = arryHeatNo[0].ToString();
bufferArray[1] = arryHeatNo[1].ToString();
bufferArray[2] = arryHeatNo[2].ToString();
if (arryHeatNo.Count > 3)
bufferArray[3] = arryHeatNo[3].ToString();
if (strHeatProcessNo != "")
{
_commClass.setHeatID(strHeatProcessNo);
_commClass.goReplaceOfLfs(strOldPos, bufferArray);
}
}
///
/// 任务强制结束操作
///
/// 加热处理号
/// 原始位置,例:BOF01_DEVICE
/// 目标位置,例:BOF01_BACK
/// 目标名称
private static void OverOperate(string strHeatProcessNo, string strOldPos, string strObjectPos, string strOptcaption)
{
string strMsg = ""; //提示信息
strMsg = "熔炼号: " + CStaticMethod.getSmeltingID(strHeatProcessNo) + " " +
strOptcaption + " \n 是否确认?";
if (MessageBox.Show(strMsg, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
{
_commClass.setHeatID(strHeatProcessNo);
_commClass.goNextPosCvtCmmd(strOldPos, strObjectPos);
//设置作业管理手动操作时间节点值
SetManualOperateValue(strHeatProcessNo, "OVER");
}
}
///
/// 回炉钢水操作
///
/// 加热处理号
/// 原始位置,例:BOF01_DEVICE
/// 目标位置,例:BOF01_BACK
/// 目标名称
private static void IsRsOperate(string strHeatProcessNo, string strOldPos, string strObjectPos, string strOptcaption)
{
string strMsg = ""; //提示信息
strMsg = "熔炼号: " + CStaticMethod.getSmeltingID(strHeatProcessNo) + " " +
strOptcaption + " \n 是否确认?";
if (MessageBox.Show(strMsg, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
{
_commClass.setHeatID(strHeatProcessNo);
_commClass.goNextPosCvtCmmd(strOldPos, strObjectPos);
//设置作业管理手动操作时间节点值
SetManualOperateValue(strHeatProcessNo, "ISRS");
}
}
///
/// 设置作业管理手动操作时间节点值
///
/// 加热处理号
/// 命令类型
private static void SetManualOperateValue(string strHeatProcessNo, string strOptCommandType)
{
string strErr = "";
string strSqlID = "SetManualOperateValue.Seting";
Hashtable htMov = new Hashtable();
htMov.Add("I1", strHeatProcessNo);
htMov.Add("I2", strOptCommandType);
htMov.Add("I3", "");
CommonClientToServer ccs = new CommonClientToServer();
ccs.ob = obMain;
//查询作业手动操作配置信息
string strReturn = ccs.ExecuteProcedureFunctions("Core.LgMes.Server.LgJobMgt.ClassManualOperate",
"SetManualOperateValue", strSqlID, htMov, out strErr);
if (strErr != "")
MessageBox.Show("执行手动操作时间值更新失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
///
/// 判断下道工序IDLE位是否有炉号
///
///
///
private static bool IsExistNextPosIDLE(string strNextPos)
{
string strErr = "";
ArrayList arry = new ArrayList();
bool blNextPos =false ;
arry.Add("GetNextPosIdleHeatNo.Select");
arry.Add(strNextPos); //岗位号
CommonClientToServer ccs = new CommonClientToServer();
ccs.ob = obMain;
//查询下道工序IDLE位是否有炉号
DataSet dsNextPos = ccs.ExecuteQueryFunctions("Core.LgMes.Server.LgJobMgt.ClassManualOperate",
"GetNextPosIdleHeatNo", arry, out strErr);
if (strErr == "" && dsNextPos!=null)
{
if (dsNextPos.Tables.Count > 0 && dsNextPos.Tables[0].Rows.Count > 0)
{
if (string.IsNullOrEmpty(dsNextPos.Tables[0].Rows[0]["OBJECTID"].ToString()))
blNextPos = true;
else
{
MessageBox.Show(dsNextPos.Tables[0].Rows[0]["OBJECTPOS"].ToString().Substring(4, 1) + "#" +
CStaticMethod.analysChineseName(dsNextPos.Tables[0].Rows[0]["OBJECTPOS"].ToString().ToString()) +
"缓冲位有任务生产,请稍候再试!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
return blNextPos;
}
}
}
else
{
MessageBox.Show("判断【" + strNextPos.Substring(4, 1) + "#" + CStaticMethod.analysChineseName(strNextPos.Substring(0, 3)) + "缓冲位】是否有炉号失败,请稍候再试!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
return blNextPos;
}
return blNextPos;
}
}
}