| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475 |
- 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;
- /***文档注释***********************************************
- * 作者 : 刘现
- * 创建日期 : 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(); //各工位加热处理号
- /// <summary>
- /// 作业管理手动操作入口函数
- /// </summary>
- /// <param name="strHeatProcessNo">加热处理号</param>
- /// <param name="strOldPos">原始位置,例:BOF01_DEVICE</param>
- /// <param name="ob">平台服务端URL</param>
- 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;
- }
- }
- }
- /// <summary>
- /// 出钢手动操作
- /// </summary>
- /// <param name="strHeatProcessNo">加热处理号</param>
- /// <param name="strOldPos">原始位置,例:BOF01_DEVICE</param>
- /// <param name="strObjectPos">目标位置,例:BOF01_BACK</param>
- /// <param name="strOptcaption">目标名称</param>
- 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");
- }
- }
- /// <summary>
- /// 去下道工序手动操作
- /// </summary>
- /// <param name="strHeatProcessNo">加热处理号</param>
- /// <param name="strOldPos">原始位置,例:BOF01_DEVICE</param>
- 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");
- }
- }
- }
- /// <summary>
- /// 根据作业路线获取下道工序
- /// </summary>
- /// <param name="strHeatProcessNo">加热处理号</param>
- /// <returns>下道工序LFS01_IDLE</returns>
- 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;
- }
- /// <summary>
- /// 指定具体工序位置操作
- /// </summary>
- /// <param name="strHeatProcessNo">加热处理号</param>
- /// <param name="strOldPos">原始位置,例:BOF01_DEVICE</param>
- /// <param name="strObjectPos">目标位置,例:BOF01_BACK</param>
- /// <param name="strOptcaption">目标名称</param>
- 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");
- }
- }
- /// <summary>
- /// 进站手动操作
- /// </summary>
- /// <param name="strHeatProcessNo">加热处理号</param>
- /// <param name="strOldPos">原始位置,例:BOF01_DEVICE</param>
- /// <param name="strObjectPos">目标位置,例:BOF01_BACK</param>
- /// <param name="strOptcaption">目标名称</param>
- 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");
- }
- }
- /// <summary>
- /// 出站手动操作
- /// </summary>
- /// <param name="strHeatProcessNo">加热处理号</param>
- /// <param name="strOldPos">原始位置,例:BOF01_DEVICE</param>
- 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");
- }
- }
- }
- /// <summary>
- /// 位置对换手动操作
- /// </summary>
- /// <param name="strHeatProcessNo">加热处理号</param>
- /// <param name="strOldPos">原始位置,例:BOF01_DEVICE</param>
- 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);
- }
- }
- /// <summary>
- /// 任务强制结束操作
- /// </summary>
- /// <param name="strHeatProcessNo">加热处理号</param>
- /// <param name="strOldPos">原始位置,例:BOF01_DEVICE</param>
- /// <param name="strObjectPos">目标位置,例:BOF01_BACK</param>
- /// <param name="strOptcaption">目标名称</param>
- 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");
- }
- }
- /// <summary>
- /// 回炉钢水操作
- /// </summary>
- /// <param name="strHeatProcessNo">加热处理号</param>
- /// <param name="strOldPos">原始位置,例:BOF01_DEVICE</param>
- /// <param name="strObjectPos">目标位置,例:BOF01_BACK</param>
- /// <param name="strOptcaption">目标名称</param>
- 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");
- }
- }
- /// <summary>
- /// 设置作业管理手动操作时间节点值
- /// </summary>
- /// <param name="strHeatProcessNo">加热处理号</param>
- /// <param name="strOptCommandType">命令类型</param>
- 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);
- }
- /// <summary>
- /// 判断下道工序IDLE位是否有炉号
- /// </summary>
- /// <param name="strNextPos"></param>
- /// <returns></returns>
- 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;
- }
- }
- }
|