You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lj_plc/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Product/PptPlan/StopAction.cs

226 lines
9.9 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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;
namespace Mesnac.Action.ChemicalWeighing.Product.PptPlan
{
/// <summary>
/// 生产管理-当班计划-终止计划业务
/// </summary>
public class StopAction : ChemicalWeighingAction, IAction
{
#region 字段定义
private RuntimeParameter _runtime;
private DbMCControl _clientGridControl = null; //本机计划控件
#endregion
#region 事件定义
/// <summary>
/// 刷新计划事件
/// </summary>
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<StopAction>.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, "RT_plan").FirstOrDefault();
if (clientGridControl == null)
{
ICSharpCode.Core.LoggingService<StopAction>.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_Serial"].Value); //获取选中的计划序号
selectedPlanNum = Convert.ToInt32(clientGridView.SelectedRows[0].Cells["Plan_Num"].Value); //获取选中的计划数
selectedPlanUnfinished = selectedPlanNum - Convert.ToInt32(clientGridView.SelectedRows[0].Cells["Real_Num"].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);
PlanState planState = (PlanState)PlanHelper.StateToValue(clientGridView.SelectedRows[0].Cells["Plan_StateText"].Value.ToString());
if (planState == PlanState.Terminated)
{
string msg7 = StringParser.Parse(ResourceService.GetString("Mesnac_Action_ChemicalWeighing_Product_PptPlan_StopAction_msg7_2")); //当前计划已终止,不能执行此操作!
MessageBox.Show(msg7, Mesnac.Basic.LanguageHelper.Caption, MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
if (planState == PlanState.Completed)
{
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<string> msgList = new List<string>();
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
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService<StopAction>.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
}
}