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
}
}