using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data; using ICSharpCode.Core; using Mesnac.Controls.Base; using Mesnac.Action.Base; using Mesnac.Codd.Session; using Mesnac.Action.ChemicalWeighing.Entity; using Mesnac.Action.ChemicalWeighing.Product.PptPlan.entity; namespace Mesnac.Action.ChemicalWeighing.Product.PptPlan { /// /// 生产管理-当班计划-终止计划业务 /// public class StopAction : ChemicalWeighingAction, IAction { #region 字段定义 private RuntimeParameter _runtime; private DbMCControl _clientGridControl = null; //本机计划控件 #endregion #region 事件定义 /// /// 刷新计划事件 /// public static event EventHandler OnStopPlan; #endregion #region 业务入口 public void Run(RuntimeParameter runtime) { base.RunIni(runtime); //必须要调用的 if (runtime.Sender is Control) { (runtime.Sender as Control).Enabled = false; } try { ICSharpCode.Core.LoggingService.Debug("生产管理-生产计划-终止计划业务..."); #region 定义变量 string selectedPlanId = null; //选中的计划号 int selectedPlanSerial = 0; //保存选中的计划序号 int selectedPlanCommand = 5; //计划命令:pcStart = 1 , pcHold = 2 , pcEdit = 3 , pcDelete = 4 , pcTerminate=5 int selectedPlanNum = 0; //保存选中计划的计划数 int selectedPlanUnfinished = 0; //计划的剩余数 #endregion #region 检验执行终止计划的条件 #region 判断当班计划界面是否打开 if (PlanHelper.IsInit == false) { string msg1 = StringParser.Parse(ResourceService.GetString("Mesnac_Action_ChemicalWeighing_Product_PptPlan_StopAction_msg1")); // 当班计划还未初始化,请先打开当班计划,再进行此操作! MessageBox.Show(msg1, Mesnac.Basic.LanguageHelper.Caption, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } #endregion #region 检验本地数据连接 DbHelper localHelper = Mesnac.Basic.DataSourceFactory.Instance.GetDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); if (localHelper == null) { string msg2 = StringParser.Parse(ResourceService.GetString("Mesnac_Action_ChemicalWeighing_Product_PptPlan_StopAction_msg2")); //本地数据库连接异常,不能终止计划{0}请在数据库连接正常后再进行“终止”操作。 msg2 = String.Format(msg2, "\r\n"); MessageBox.Show(msg2, Mesnac.Basic.LanguageHelper.Caption, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } #endregion #region 获取界面控件 DbMCControl clientGridControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "Base_PlanInfo").FirstOrDefault(); if (clientGridControl == null) { ICSharpCode.Core.LoggingService.Error("{生产计划-终止计划} 缺少计划列表网格控件..."); return; } this._runtime = runtime; this._clientGridControl = clientGridControl; DataGridView clientGridView = this._clientGridControl.BaseControl as DataGridView; #endregion #region 判断是否选择了要终止的计划 if (clientGridView.SelectedRows.Count != 1) { string msg6_1 = StringParser.Parse(ResourceService.GetString("Mesnac_Action_ChemicalWeighing_Product_PptPlan_StopAction_msg6_1")); //请选择一条要终止的计划! MessageBox.Show(msg6_1, Mesnac.Basic.LanguageHelper.Caption, MessageBoxButtons.OK, MessageBoxIcon.Information); this._runtime.IsReturn = true; return; } selectedPlanId = clientGridView.SelectedRows[0].Cells["Plan_Id"].Value as string; //获取选中的计划号 selectedPlanSerial = Convert.ToInt32(clientGridView.SelectedRows[0].Cells["plan_order"].Value); //获取选中的计划序号 selectedPlanNum = Convert.ToInt32(clientGridView.SelectedRows[0].Cells["plan_amount"].Value); //获取选中的计划数 selectedPlanUnfinished = selectedPlanNum - Convert.ToInt32(clientGridView.SelectedRows[0].Cells["real_amount"].Value); //获取选中的剩余数 //int.TryParse(clientGridView.SelectedRows[0].Cells["PlanNum"].Value.ToString(), out selectedPlanNum); #endregion #region 判断计划状态是否合法 //PlanState planState = (PlanState)Convert.ToInt32(clientGridView.SelectedRows[0].Cells["Plan_State"].Value); string planState = clientGridView.SelectedRows[0].Cells["plan_state"].Value.ToString(); if (planState == "待执行") { string msg7 = StringParser.Parse(ResourceService.GetString("Mesnac_Action_ChemicalWeighing_Product_PptPlan_StopAction_msg7_2")); //当前计划已终止,不能执行此操作! MessageBox.Show("当前计划未执行,不能执行终止操作!!!", Mesnac.Basic.LanguageHelper.Caption, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (planState == "已完成") { string msg7 = StringParser.Parse(ResourceService.GetString("Mesnac_Action_ChemicalWeighing_Product_PptPlan_StopAction_msg7_3")); //当前计划已完成,不能执行此操作! MessageBox.Show(msg7, Mesnac.Basic.LanguageHelper.Caption, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } #endregion #endregion #region 原平台终止计划业务 /*string msg8 = StringParser.Parse(ResourceService.GetString("Mesnac_Action_ChemicalWeighing_Product_PptPlan_StopAction_msg8")); //当前计划序号{0}设定{1}车,{2}您确认暂停? msg8 = String.Format(msg8, selectedPlanSerial, selectedPlanNum, "\r\n"); DialogResult result = MessageBox.Show(msg8, Mesnac.Basic.LanguageHelper.Caption, MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes) { List msgList = new List(); if (ChemicalWeighingPlc.PlcPlanHelper.ExecStop(selectedPlanSerial,selectedPlanCommand,selectedPlanNum,selectedPlanUnfinished, true, msgList)) { #region 刷新数据库 PlanHelper.UpdatePlanState(selectedPlanId,7); #endregion #region 消息提示 string msg11 = StringParser.Parse(ResourceService.GetString("Mesnac_Action_ChemicalWeighing_Product_PptPlan_StopAction_msg11")); //终止计划命令发送成功! if (Global.PublicVar.Instance.MessageDialogMode == 0) { Mesnac.Basic.MessageBoxTimeOut.Show(msg11, Mesnac.Basic.LanguageHelper.Caption, 3000); } else { MessageBox.Show(msg11, Mesnac.Basic.LanguageHelper.Caption, MessageBoxButtons.OK, MessageBoxIcon.Information); } #endregion #region 判断等待计划数和正在运行的计划数。如果两个都是0,清空RT_Plan表。 int waitPlanCount = Product.PptPlan.PlanHelper.GetUnExePlanNum(); int runningPlanCount = Product.PptPlan.PlanHelper.GetRunningPlanNum(); int downPlanCount = Product.PptPlan.PlanHelper.GetDownPlanNum(); if (waitPlanCount == 0 && runningPlanCount == 0 && downPlanCount == 0) { Product.PptPlan.PlanHelper.ClearRT_Plan(); } #endregion #region 触发终止计划事件 if (OnStopPlan != null) { OnStopPlan(runtime, System.EventArgs.Empty); } #endregion } else { string logContent = Mesnac.Basic.DataProcessor.CombineMsgList(msgList); //base.DBLog(logContent); } }*/ #endregion //下传终止信号 bool writeRpCancel = BasePlcHelper.Instance.PlcWriteByDataKey(BasePlcHelper.Instance.ChemicalWeighing_PC_RpCancel, new object[] { true }); if (!writeRpCancel) { Base_PlanInfo planInfo = PlanHelper.getPlanInfoByPlanId(selectedPlanId); planInfo.plan_State = 3; PlanHelper.UpdateBasePlanInfo(planInfo); MessageBox.Show("终止信号下传成功", Mesnac.Basic.LanguageHelper.Caption, MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show("终止信号下传失败", Mesnac.Basic.LanguageHelper.Caption, MessageBoxButtons.OK, MessageBoxIcon.Information); } } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("终止计划失败:" + ex.Message, ex); #region 记录操作日志 //base.DBLog(ex.Message); #endregion MessageBox.Show(ex.Message, Mesnac.Basic.LanguageHelper.Caption, MessageBoxButtons.OK, MessageBoxIcon.Information); } finally { if (runtime.Sender is Control) { (runtime.Sender as Control).Enabled = true; } } } #endregion } }