From 6eaee007f63cd83d5ebde8d1816bac8252eb523d Mon Sep 17 00:00:00 2001 From: nodyang Date: Sun, 24 Sep 2023 09:10:09 +0800 Subject: [PATCH] Demo --- .../FreeDb/FreeSqlUnit.cs | 43 +- .../Mesnac.Action.ChemicalWeighing.csproj | 3 - .../BarcodeReport/SelectBarcodeAction.cs | 77 +++ .../MaterialStatisticsReport/ExportAction.cs | 82 +++ .../InitFormAction.cs | 128 +++++ .../SelectWeightAction.cs | 123 ++++ .../ProductionAnalysisReport/ExportAction.cs | 248 ++++++++ .../InitFormAction.cs | 28 + .../SelectAnalysisAction.cs | 344 +++++++++++ .../Report/ProductionReport/ExportAction.cs | 253 +++++++++ .../Report/ProductionReport/InitFormAction.cs | 28 + .../ProductionReport/SelectPlanAction.cs | 112 ++++ .../ProductionReport/SelectRowAction.cs | 537 ++++++++++++++++++ .../Test/TestAction.cs | 6 + .../Resources/解包室动图.psd | Bin 0 -> 210351 bytes .../EventConfig/上辅机/LanguageDefault.xml | 216 +++++++ .../上辅机/PLC管理.PLC管理.xml | 93 +++ .../EventConfig/上辅机/业务测试.xml | 49 ++ .../上辅机/基础数据维护.xml | 229 ++++++++ .../基础数据维护.物料细类.xml | 24 + .../上辅机/基础界面.单表界面.xml | 114 ++++ .../EventConfig/上辅机/工艺回溯.xml | 24 + .../上辅机/工艺配方.配方管理.xml | 182 ++++++ .../上辅机/报表.批报表.xml | 49 ++ .../上辅机/报表.报表设计.xml | 33 ++ .../上辅机/报表.物料投放.xml | 43 ++ .../上辅机/报表.车报表.xml | 149 +++++ .../EventConfig/上辅机/数据回放.xml | 59 ++ .../上辅机/日志.报警日志.xml | 53 ++ .../上辅机/日志.系统日志.xml | 42 ++ .../EventConfig/上辅机/生产管理.xml | 82 +++ .../EventConfig/上辅机/生产计划.xml | 64 +++ .../上辅机/生产计划.当班计划.xml | 155 +++++ .../EventConfig/上辅机/系统初始化.xml | 54 ++ .../EventConfig/上辅机/系统工具.xml | 33 ++ .../EventConfig/上辅机/系统设置.xml | 54 ++ .../上辅机/系统配置.权限管理.xml | 122 ++++ .../上辅机/系统配置.通用配置.xml | 39 ++ .../EventConfig/小料称量/工程调试.xml | 31 + 39 files changed, 3979 insertions(+), 26 deletions(-) create mode 100644 Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/BarcodeReport/SelectBarcodeAction.cs create mode 100644 Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/MaterialStatisticsReport/ExportAction.cs create mode 100644 Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/MaterialStatisticsReport/InitFormAction.cs create mode 100644 Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/MaterialStatisticsReport/SelectWeightAction.cs create mode 100644 Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionAnalysisReport/ExportAction.cs create mode 100644 Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionAnalysisReport/InitFormAction.cs create mode 100644 Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionAnalysisReport/SelectAnalysisAction.cs create mode 100644 Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionReport/ExportAction.cs create mode 100644 Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionReport/InitFormAction.cs create mode 100644 Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionReport/SelectPlanAction.cs create mode 100644 Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionReport/SelectRowAction.cs create mode 100644 Controls/Mesnac.Controls.ChemicalWeighing/Resources/解包室动图.psd create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/LanguageDefault.xml create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/PLC管理.PLC管理.xml create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/业务测试.xml create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/基础数据维护.xml create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/基础数据维护.物料细类.xml create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/基础界面.单表界面.xml create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/工艺回溯.xml create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/工艺配方.配方管理.xml create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/报表.批报表.xml create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/报表.报表设计.xml create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/报表.物料投放.xml create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/报表.车报表.xml create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/数据回放.xml create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/日志.报警日志.xml create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/日志.系统日志.xml create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/生产管理.xml create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/生产计划.xml create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/生产计划.当班计划.xml create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/系统初始化.xml create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/系统工具.xml create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/系统设置.xml create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/系统配置.权限管理.xml create mode 100644 Main/MCEdit/Data/EventConfig/上辅机/系统配置.通用配置.xml create mode 100644 Main/MCEdit/Data/EventConfig/小料称量/工程调试.xml diff --git a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/FreeDb/FreeSqlUnit.cs b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/FreeDb/FreeSqlUnit.cs index 98f5677..58e9c1e 100644 --- a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/FreeDb/FreeSqlUnit.cs +++ b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/FreeDb/FreeSqlUnit.cs @@ -3,6 +3,7 @@ using Mesnac.Codd.Session; using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -11,31 +12,27 @@ namespace Mesnac.Action.ChemicalWeighing.FreeDb { public class FreeSqlUnit { - private static IFreeSql _instance = null; - private FreeSqlUnit() { } - public static IFreeSql Instance - { - get - { - if (_instance == null) - { - - DbHelper dbHelper = Mesnac.Basic.DataSourceFactory.Instance.GetDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); - - _instance = new FreeSql.FreeSqlBuilder() - .UseConnectionString(FreeSql.DataType.SqlServer, dbHelper.DbSession.ConnectionString) - .UseAutoSyncStructure(false) //自动同步实体结构到数据库 - .Build(); //请务必定义成 Singleton 单例模式 - } - return _instance; - } - } - - internal static T Select() + + + public static IFreeSql Instance => freeSql.Value; + + + static Lazy freeSql = new Lazy(() => { - throw new NotImplementedException(); - } + DbHelper dbHelper = Mesnac.Basic.DataSourceFactory.Instance.GetDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); + return new FreeSql.FreeSqlBuilder() + .UseMonitorCommand(cmd => Trace.WriteLine($"Sql:{cmd.CommandText}"))//监听SQL语句,Trace在输出选项卡中查看 + .UseConnectionString(FreeSql.DataType.SqlServer, dbHelper.DbSession.ConnectionString) + .UseAutoSyncStructure(false) //自动同步实体结构到数据库,FreeSql不会扫描程序集,只有CRUD时才会生成表。 + .Build(); + }); + + } } + + + + diff --git a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Mesnac.Action.ChemicalWeighing.csproj b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Mesnac.Action.ChemicalWeighing.csproj index 8919388..cf646e0 100644 --- a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Mesnac.Action.ChemicalWeighing.csproj +++ b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Mesnac.Action.ChemicalWeighing.csproj @@ -168,9 +168,6 @@ False ..\..\..\PlugInPlatform\Mesnac.PlugIn.dll - - ..\..\Microsoft.Office.Interop.Excel.dll - diff --git a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/BarcodeReport/SelectBarcodeAction.cs b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/BarcodeReport/SelectBarcodeAction.cs new file mode 100644 index 0000000..db08d43 --- /dev/null +++ b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/BarcodeReport/SelectBarcodeAction.cs @@ -0,0 +1,77 @@ +using Mesnac.Action.Base; +using Mesnac.Codd.Session; +using Mesnac.Controls.Base; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Mesnac.Action.ChemicalWeighing.Report.BarcodeReport +{ + /// + /// 查询条码扫描信息 + /// + class SelectBarcodeAction : ChemicalWeighingAction, IAction + { + private RuntimeParameter _runtime; + private IBaseControl _startdate = null; //开始日期 + private IBaseControl _enddate = null; //结束日期 + private IBaseControl _starttime = null; //开始时间 + private IBaseControl _endtime = null; //结束时间 + private DbMCControl _clientDGV = null; + public void Run(RuntimeParameter runtime) + { + base.RunIni(runtime); + this._runtime = runtime; + ICSharpCode.Core.LoggingService.Debug("条码扫描信息报表-查询.."); + + DbHelper dbHelper = Mesnac.Basic.DataSourceFactory.Instance.GetDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); + dbHelper.ClearParameter(); + + StringBuilder sbSql = new StringBuilder(@"SELECT *, CASE Scan_State WHEN '1' THEN '通过' ELSE '不通过' END AS 'state' FROM LR_BarcodeLog WHERE 1=1 "); + + List mcControllist = GetAllDbMCControlsByOption(DbOptionTypes.Query);//获取所有待初始化控件 + //开始时间条件 + this._startdate = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "startdate").FirstOrDefault().BaseControl; + this._starttime = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "starttime").FirstOrDefault().BaseControl; + if (_startdate != null && _starttime != null) + { + sbSql.AppendLine(@"And Scan_Time >= '" + Convert.ToDateTime(_startdate.MCValue).ToString("yyyy-MM-dd") + " " + Convert.ToDateTime(_starttime.MCValue).ToShortTimeString() + "' "); + } + else + { + ICSharpCode.Core.LoggingService.Debug("{条码扫描信息报表} 缺少key值为startdate或者starttime的时间查询条件..."); + return; + } + //结束时间条件 + this._enddate = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "enddate").FirstOrDefault().BaseControl; + this._endtime = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "endtime").FirstOrDefault().BaseControl; + if (_enddate != null && _endtime != null) + { + sbSql.AppendLine(@"And Scan_Time <= '" + Convert.ToDateTime(_enddate.MCValue).ToString("yyyy-MM-dd") + " " + Convert.ToDateTime(_endtime.MCValue).ToShortTimeString() + "' "); + } + else + { + ICSharpCode.Core.LoggingService.Debug("{条码扫描信息报表} 缺少key值为enddate或者enddate的时间查询条件..."); + return; + } + + dbHelper.CommandText = sbSql.ToString(); + dbHelper.CommandType = System.Data.CommandType.Text; + DataTable table = dbHelper.ToDataTable(); + + this._clientDGV = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "LR_BarcodeLog").FirstOrDefault(); + if (_clientDGV == null || !(_clientDGV.BaseControl is DataGridView)) + { + ICSharpCode.Core.LoggingService.Warn("{条码扫描信息报表-查询} 缺少DataGridView控件..."); + runtime.IsReturn = false; + return; + } + _clientDGV.BaseControl.BindDataSource = null; + _clientDGV.BaseControl.BindDataSource = table; + } + } +} diff --git a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/MaterialStatisticsReport/ExportAction.cs b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/MaterialStatisticsReport/ExportAction.cs new file mode 100644 index 0000000..b098b56 --- /dev/null +++ b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/MaterialStatisticsReport/ExportAction.cs @@ -0,0 +1,82 @@ +using ICSharpCode.Core; +using Mesnac.Action.Base; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Mesnac.Action.ChemicalWeighing.Report.MaterialStatisticsReport +{ + /// + /// 导出物料统计报表业务 + /// + class ExportAction : ChemicalWeighingAction, IAction + { + private DbMCControl _clientDGV = null; + public void Run(RuntimeParameter runtime) + { + base.RunIni(runtime); //必须要调用的 + ICSharpCode.Core.LoggingService.Debug("物料统计-导出..."); + + SaveFileDialog sfd = new SaveFileDialog(); + sfd.Filter = "xls files(*.xls)|*.xls"; + sfd.FileName = String.Format("物料统计报表_{0:yyyyMMdd}", DateTime.Now); + sfd.AddExtension = true; + DialogResult result = sfd.ShowDialog(); + if (result == DialogResult.OK) + { + this._clientDGV = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "LR_weigh").FirstOrDefault(); + if (_clientDGV == null || !(_clientDGV.BaseControl is DataGridView)) + { + ICSharpCode.Core.LoggingService.Warn("{物料统计报表-导出} 缺少DataGridView控件..."); + runtime.IsReturn = false; + return; + } + DataTable dt = _clientDGV.BaseControl.BindDataSource as DataTable; + dt.Columns["Recipe_Name"].ColumnName = "配方名"; + dt.Columns["Material_Code"].ColumnName = "物料代码"; + dt.Columns["Material_name"].ColumnName = "物料名"; + dt.Columns["realWeight"].ColumnName = "重量(kg)"; + string fileName = sfd.FileName; + if (!String.IsNullOrEmpty(fileName)) + { + try + { + System.IO.Stream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite); + Mesnac.Basic.DataToFileHandler.Instance.ToExcel(dt, ref fs); + fs.Close(); + string msg1 = StringParser.Parse(ResourceService.GetString("Mesnac_Action_ChemicalWeighing_Report_MaterialStatisticsReport_ExportAction_msg1")); //导出物料统计数据至Excel成功! + ICSharpCode.Core.LoggingService.Info(msg1); + + #region 记录操作日志 + + base.DBLog(msg1); + + #endregion + + MessageBox.Show(msg1, Mesnac.Basic.LanguageHelper.Caption, MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception ex) + { + string msg2 = StringParser.Parse(ResourceService.GetString("Mesnac_Action_ChemicalWeighing_Report_MaterialStatisticsReport_ExportAction_msg2")); //导出物料统计数据至Excel失败:{0}! + msg2 = String.Format(msg2, ex.Message); + ICSharpCode.Core.LoggingService.Error(msg2); + + #region 记录操作日志 + + base.DBLog(msg2); + + #endregion + + MessageBox.Show(msg2, Mesnac.Basic.LanguageHelper.WarnCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); + runtime.IsReturn = true; + return; + } + } + } + } + } +} diff --git a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/MaterialStatisticsReport/InitFormAction.cs b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/MaterialStatisticsReport/InitFormAction.cs new file mode 100644 index 0000000..61ac76c --- /dev/null +++ b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/MaterialStatisticsReport/InitFormAction.cs @@ -0,0 +1,128 @@ +using Mesnac.Action.Base; +using Mesnac.Action.ChemicalWeighing.MaterialManage; +using Mesnac.Action.ChemicalWeighing.Technical.PmtRecipe; +using Mesnac.Action.ChemicalWeighing.Technical.PmtRecipe.entity; +using Mesnac.Codd.Session; +using Mesnac.Controls.Base; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Mesnac.Action.ChemicalWeighing.Report.MaterialStatisticsReport +{ + public class InitFormAction : ChemicalWeighingAction, IAction + { + private DbMCControl _dgvLRPlan = null; + private IBaseControl _startdate = null; //开始日期 + private IBaseControl _enddate = null; //结束日期 + private IBaseControl _starttime = null; //开始时间 + private IBaseControl _endtime = null; //结束时间 + private DbMCControl _clientDGV = null; + private IBaseControl _recipeName = null; //配方名 + private string[] DataTypeArray = { "--", "早", "中", "晚" }; + private string[] materialDataTypeArray; + private string[] recipeDataTypeArray; + + + public void Run(RuntimeParameter runtime) + { + base.RunIni(runtime); //必须要调用的 + ICSharpCode.Core.LoggingService.Debug("生产报表-窗体初始化..."); + + List mcControllist = GetAllDbMCControlsByOption(DbOptionTypes.Query);//获取所有待初始化控件 + IBaseControl starttime = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "starttime").FirstOrDefault().BaseControl; + IBaseControl endtime = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "endtime").FirstOrDefault().BaseControl; + starttime.MCValue = DateTime.Parse("00:00:00"); + endtime.MCValue = DateTime.Parse("23:59:59"); + this._recipeName = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey == "[DataSource1].[Base_RecipeInfo].[recipe_Name]").FirstOrDefault().BaseControl; + + #region 下拉框班次加载 + ComboBox comboBox1 = base.GetControlById("MCCombobox1") as ComboBox; + List DataType = new List(DataTypeArray); + comboBox1.DataSource = DataType; + #endregion + #region 下拉框物料名称加载 + List base_MaterialInfos = MaterialHelper.getMaterialList(); + materialDataTypeArray = new string[base_MaterialInfos.Count + 1]; + materialDataTypeArray[0] = "--"; + for (int i = 0; i < base_MaterialInfos.Count; i++) + { + materialDataTypeArray[i + 1] = base_MaterialInfos[i].materialName; + } + ComboBox comboBox2 = base.GetControlById("MCCombobox3") as ComboBox; + comboBox2.DataSource = materialDataTypeArray; + #endregion + #region 下拉框配方名称加载 + ComboBox comboBox3 = base.GetControlById("MCCombobox2") as ComboBox; + List base_RecipeInfos = RecipeHelper.GetBaseRecipeInfo(); + recipeDataTypeArray = new string[base_RecipeInfos.Count + 1]; + recipeDataTypeArray[0] = "--"; + for (int i = 0; i < base_RecipeInfos.Count; i++) + { + recipeDataTypeArray[i + 1] = base_RecipeInfos[i].recipeName; + } + comboBox3.DataSource = recipeDataTypeArray; + #endregion + + + + + + + + //2.按名称累加物料统计 + DbHelper dbHelper = Mesnac.Basic.DataSourceFactory.Instance.GetDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); + dbHelper.ClearParameter(); + + StringBuilder sbSql = new StringBuilder(@"SELECT Base_PlanInfo.recipe_Name AS Recipe_Name,Base_MaterialInfo.material_Id AS Material_Code,Base_MaterialInfo.material_Name AS Material_Name, SUM(LR_Weigh.Real_Weight) as realWeight,Pmt_Shiftime.Shift_name FROM + LR_weigh,Base_PlanInfo,Base_RecipeInfo,Base_MaterialInfo,Pmt_Shiftime +WHERE Base_PlanInfo.plan_Id = LR_weigh.Plan_id AND Base_MaterialInfo.material_Id = LR_weigh.Material_Code AND Base_RecipeInfo.recipe_Id = LR_weigh.Recipe_code AND Pmt_Shiftime.Shift_id = Base_PlanInfo.plan_Team "); + + //开始时间条件 + this._startdate = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "startdate").FirstOrDefault().BaseControl; + this._starttime = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "starttime").FirstOrDefault().BaseControl; + if (_startdate != null && _starttime != null) + { + sbSql.AppendLine(@"And LR_Weigh.Weight_Time >= '" + Convert.ToDateTime(_startdate.MCValue).ToString("yyyy-MM-dd") + " " + Convert.ToDateTime(_starttime.MCValue).ToShortTimeString() + "' "); + } + else + { + ICSharpCode.Core.LoggingService.Debug("{物料统计报表} 缺少key值为startdate或者starttime的时间查询条件..."); + return; + } + //结束时间条件 + this._enddate = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "enddate").FirstOrDefault().BaseControl; + this._endtime = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "endtime").FirstOrDefault().BaseControl; + if (_enddate != null && _endtime != null) + { + sbSql.AppendLine(@"And LR_Weigh.Weight_Time <= '" + Convert.ToDateTime(_enddate.MCValue).ToString("yyyy-MM-dd") + " " + Convert.ToDateTime(_endtime.MCValue).ToShortTimeString() + "' "); + } + else + { + ICSharpCode.Core.LoggingService.Debug("{物料统计报表} 缺少key值为enddate或者enddate的时间查询条件..."); + return; + } + + + sbSql.Append(" GROUP BY Base_PlanInfo.recipe_Name,Base_MaterialInfo.material_Id,Base_MaterialInfo.material_Name,Pmt_Shiftime.Shift_name"); + + dbHelper.CommandText = sbSql.ToString(); + dbHelper.CommandType = System.Data.CommandType.Text; + DataTable table = dbHelper.ToDataTable(); + + this._clientDGV = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "LR_weigh").FirstOrDefault(); + if (_clientDGV == null || !(_clientDGV.BaseControl is DataGridView)) + { + ICSharpCode.Core.LoggingService.Warn("{物料统计报表-查询} 缺少DataGridView控件..."); + runtime.IsReturn = false; + return; + } + _clientDGV.BaseControl.BindDataSource = null; + _clientDGV.BaseControl.BindDataSource = table; + } + } +} diff --git a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/MaterialStatisticsReport/SelectWeightAction.cs b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/MaterialStatisticsReport/SelectWeightAction.cs new file mode 100644 index 0000000..cc04579 --- /dev/null +++ b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/MaterialStatisticsReport/SelectWeightAction.cs @@ -0,0 +1,123 @@ +using Mesnac.Action.Base; +using Mesnac.Action.ChemicalWeighing.Test; +using Mesnac.Codd.Session; +using Mesnac.Controls.Base; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Mesnac.Action.ChemicalWeighing.Report.MaterialStatisticsReport +{ + /// + /// 物料统计报表 + /// + class SelectWeightAction : ChemicalWeighingAction, IAction + { + public static event EventHandler MaterialSynchronousComplete; + private RuntimeParameter _runtime; + private IBaseControl _startdate = null; //开始日期 + private IBaseControl _enddate = null; //结束日期 + private IBaseControl _starttime = null; //开始时间 + private IBaseControl _endtime = null; //结束时间 + private DbMCControl _clientDGV = null; + private IBaseControl _recipeName = null; //配方名 + private IBaseControl _shiftName = null; //班次 + private IBaseControl _materialName = null; //物料名称 + public void Run(RuntimeParameter runtime) + { + base.RunIni(runtime); + this._runtime = runtime; + ICSharpCode.Core.LoggingService.Debug("物料统计报表-查询.."); + //1.按配方、按时间、按班次物料统计 + //ComboBox comboBox = base.GetControlById("MCCombobox1") as ComboBox; + //if (SelectWeightAction.MaterialSynchronousComplete != null) + //{ + // SelectWeightAction.MaterialSynchronousComplete(null, EventArgs.Empty); + //} + + + + //2.按名称累加物料统计 + DbHelper dbHelper = Mesnac.Basic.DataSourceFactory.Instance.GetDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); + dbHelper.ClearParameter(); + + StringBuilder sbSql = new StringBuilder(@"SELECT Base_PlanInfo.recipe_Name AS Recipe_Name,Base_MaterialInfo.material_Id AS Material_Code,Base_MaterialInfo.material_Name AS Material_Name, SUM(LR_Weigh.Real_Weight) as realWeight,Pmt_Shiftime.Shift_name FROM + LR_weigh,Base_PlanInfo,Base_RecipeInfo,Base_MaterialInfo,Pmt_Shiftime +WHERE Base_PlanInfo.plan_Id = LR_weigh.Plan_id AND Base_MaterialInfo.material_Id = LR_weigh.Material_Code AND Base_RecipeInfo.recipe_Id = LR_weigh.Recipe_code AND Pmt_Shiftime.Shift_id = Base_PlanInfo.plan_Team "); + + List mcControllist = GetAllDbMCControlsByOption(DbOptionTypes.Query);//获取所有待初始化控件 + //开始时间条件 + this._startdate = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "startdate").FirstOrDefault().BaseControl; + this._starttime = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "starttime").FirstOrDefault().BaseControl; + if (_startdate != null && _starttime != null) + { + sbSql.AppendLine(@"And LR_Weigh.Weight_Time >= '" + Convert.ToDateTime(_startdate.MCValue).ToString("yyyy-MM-dd") + " " + Convert.ToDateTime(_starttime.MCValue).ToShortTimeString() + "' "); + } + else + { + ICSharpCode.Core.LoggingService.Debug("{物料统计报表} 缺少key值为startdate或者starttime的时间查询条件..."); + return; + } + //结束时间条件 + this._enddate = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "enddate").FirstOrDefault().BaseControl; + this._endtime = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "endtime").FirstOrDefault().BaseControl; + if (_enddate != null && _endtime != null) + { + sbSql.AppendLine(@"And LR_Weigh.Weight_Time <= '" + Convert.ToDateTime(_enddate.MCValue).ToString("yyyy-MM-dd") + " " + Convert.ToDateTime(_endtime.MCValue).ToShortTimeString() + "' "); + } + else + { + ICSharpCode.Core.LoggingService.Debug("{物料统计报表} 缺少key值为enddate或者enddate的时间查询条件..."); + return; + } + //配方名称、物料名称及班次 + this._recipeName = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey == "[DataSource1].[Base_RecipeInfo].[recipe_Name]").FirstOrDefault().BaseControl; + this._shiftName = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey == "[DataSource1].[Pmt_Shiftime].[Shift_name]").FirstOrDefault().BaseControl; + + this._materialName = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey == "[DataSource1].[Base_MaterialInfo].[material_Name]").FirstOrDefault().BaseControl; + + if (!String.IsNullOrEmpty(this._recipeName.MCValue.ToString())) + { + if (_recipeName.MCValue.ToString() != "--") + { + sbSql.AppendLine(@"And Base_PlanInfo.Recipe_Name = '" + _recipeName.MCValue.ToString() + "' "); + } + } + if (!String.IsNullOrEmpty(this._shiftName.MCValue.ToString())) + { + if (_shiftName.MCValue.ToString() != "--") + { + sbSql.AppendLine(@"And Shift_Name = '" + _shiftName.MCValue.ToString() + "' "); + } + } + if (!String.IsNullOrEmpty(this._materialName.MCValue.ToString())) + { + if (_materialName.MCValue.ToString() != "--") + { + sbSql.AppendLine(@"And Material_Name = '" + _materialName.MCValue.ToString() + "' "); + } + } + + + sbSql.Append(" GROUP BY Base_PlanInfo.recipe_Name,Base_MaterialInfo.material_Id,Base_MaterialInfo.material_Name,Pmt_Shiftime.Shift_name"); + + dbHelper.CommandText = sbSql.ToString(); + dbHelper.CommandType = System.Data.CommandType.Text; + DataTable table = dbHelper.ToDataTable(); + + this._clientDGV = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "LR_weigh").FirstOrDefault(); + if (_clientDGV == null || !(_clientDGV.BaseControl is DataGridView)) + { + ICSharpCode.Core.LoggingService.Warn("{物料统计报表-查询} 缺少DataGridView控件..."); + runtime.IsReturn = false; + return; + } + _clientDGV.BaseControl.BindDataSource = null; + _clientDGV.BaseControl.BindDataSource = table; + } + } +} diff --git a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionAnalysisReport/ExportAction.cs b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionAnalysisReport/ExportAction.cs new file mode 100644 index 0000000..b73c915 --- /dev/null +++ b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionAnalysisReport/ExportAction.cs @@ -0,0 +1,248 @@ +using ICSharpCode.Core; +using Mesnac.Action.Base; +using Mesnac.Controls.Base; +using Microsoft.Office.Interop.Excel; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Mesnac.Action.ChemicalWeighing.Report.ProductionAnalysisReport +{ + /// + /// 生产分析报表导出业务 + /// + class ExportAction : ChemicalWeighingAction, Base.IAction + { + private IBaseControl _startdate = null; //开始日期 + private IBaseControl _enddate = null; //结束日期 + private IBaseControl _starttime = null; //开始时间 + private IBaseControl _endtime = null; //结束时间 + private DbMCControl _recipeNameControl = null; //配方名Combobox控件 + private Control _clientDGV = null; //生产分析DGV + public void Run(RuntimeParameter runtime) + { + base.RunIni(runtime); //必须要调用的 + ICSharpCode.Core.LoggingService.Debug("生产分析报表-导出..."); + + #region 时间配方名控件 + List mcControllist = GetAllDbMCControlsByOption(DbOptionTypes.Query);//获取所有待初始化控件 + //开始时间条件 + this._startdate = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "startdate").FirstOrDefault().BaseControl; + this._starttime = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "starttime").FirstOrDefault().BaseControl; + if (_startdate == null && _starttime == null) + { + ICSharpCode.Core.LoggingService.Debug("{生产分析报表} 缺少key值为startdate或者starttime的时间查询条件..."); + return; + } + string start = Convert.ToDateTime(_startdate.MCValue).ToString("yyyy-MM-dd") + " " + Convert.ToDateTime(_starttime.MCValue).ToShortTimeString(); + + //结束时间条件 + this._enddate = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "enddate").FirstOrDefault().BaseControl; + this._endtime = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "endtime").FirstOrDefault().BaseControl; + if (_enddate == null && _endtime == null) + { + ICSharpCode.Core.LoggingService.Debug("{生产分析报表} 缺少key值为enddate或者enddate的时间查询条件..."); + return; + } + string end = Convert.ToDateTime(_enddate.MCValue).ToString("yyyy-MM-dd") + " " + Convert.ToDateTime(_endtime.MCValue).ToShortTimeString(); + + this._recipeNameControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "[Pmt_recipe].[Recipe_Name]").FirstOrDefault(); + if (_recipeNameControl == null) + { + ICSharpCode.Core.LoggingService.Warn("{生产分析报表} 缺少配方名控件..."); + runtime.IsReturn = false; + return; + } + ComboBox recipeNameCB = this._recipeNameControl.BaseControl as ComboBox; + #endregion + + + List PlanIds = ReportHelper.GetPlanIDList(start, end, recipeNameCB.Text); + string lR_planID = PlanIds[0]; + string lR_reName = recipeNameCB.Text; + + SaveFileDialog sfd = new SaveFileDialog(); + sfd.Filter = "xls files(*.xls)|*.xls"; + sfd.FileName = String.Format("生产分析报表_{0:yyyyMMdd}", DateTime.Now); + sfd.AddExtension = true; + DialogResult result = sfd.ShowDialog(); + if (result == DialogResult.OK) + { + + bool gridFlag = false; + foreach (Control ib in GetAllControls()) + { + + if (ib.Name.Contains("MultiColHeaderDgv")) + { + this._clientDGV = ib; + gridFlag = true; + } + if (gridFlag) + { + break; + } + } + if (_clientDGV == null) + { + ICSharpCode.Core.LoggingService.Warn("{生产分析报表-导出} 缺少DataGridView控件..."); + runtime.IsReturn = false; + return; + } + Mesnac.Controls.Default.MultiColHeaderDgv clientGrid = (this._clientDGV as Mesnac.Controls.Default.MultiColHeaderDgv); + System.Data.DataTable dt = clientGrid.DataSource as System.Data.DataTable; + + string fileName = sfd.FileName; + if (!String.IsNullOrEmpty(fileName)) + { + try + { + List lR_Recipes = ReportHelper.GetLR_recipeList(lR_planID); + + DataTabletoExcel(dt, fileName, lR_Recipes, lR_reName); + + string msg1 = StringParser.Parse(ResourceService.GetString("Mesnac_Action_ChemicalWeighing_Report_ProductionAnalysisReport_ExportAction_msg1")); //导出生产分析报表数据至Excel成功! + ICSharpCode.Core.LoggingService.Info(msg1); + + #region 记录操作日志 + + base.DBLog(msg1); + + #endregion + + MessageBox.Show(msg1, Mesnac.Basic.LanguageHelper.Caption, MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception ex) + { + string msg2 = StringParser.Parse(ResourceService.GetString("Mesnac_Action_ChemicalWeighing_Report_ProductionAnalysisReport_ExportAction_msg2")); //导出生产分析数据至Excel失败:{0}! + msg2 = String.Format(msg2, ex.Message); + ICSharpCode.Core.LoggingService.Error(msg2); + + #region 记录操作日志 + + base.DBLog(msg2); + + #endregion + + MessageBox.Show(msg2, Mesnac.Basic.LanguageHelper.WarnCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); + runtime.IsReturn = true; + return; + } + } + } + + + } + public void DataTabletoExcel(System.Data.DataTable tmpDataTable, string strFileName, List lR_Recipes, string reName) + { + ///先得到datatable的行数 + int rowNum = tmpDataTable.Rows.Count; + ///列数 + int columnNum = tmpDataTable.Columns.Count; + ///声明一个应用程序类实例 + Microsoft.Office.Interop.Excel.Application xlApp = new ApplicationClass(); + + //创建一个新工作簿 + Workbook xlBook = xlApp.Workbooks.Add(); + ///在工作簿中得到sheet。 + _Worksheet oSheet = (_Worksheet)xlBook.Worksheets[1]; + + #region 绘制列 + + //绘制配方名和开始时间 + oSheet.Cells[1, 1] = "配方名"; + oSheet.Cells[1, 2] = reName; + + //自定义方法,绘制合并表头 + RangeBuild(oSheet, oSheet.Cells[2, 1], oSheet.Cells[2, 2], "物料"); + oSheet.Cells[3, 1] = "车次"; + oSheet.Cells[3, 2] = "检量时间"; + + decimal sumSet_Weight = 0.0M; + decimal sumSet_Error = 0.0M; + + int ordinate = 3; + if (lR_Recipes != null && lR_Recipes.Count > 0) + { + //物料表头 + for (int i = 0; i < lR_Recipes.Count; i++) + { + sumSet_Weight += (decimal)lR_Recipes[i].Set_Weight; + sumSet_Error += (decimal)lR_Recipes[i].Set_Error; + + RangeBuild(oSheet, oSheet.Cells[2, ordinate], oSheet.Cells[2, ordinate + 2], lR_Recipes[i].Material_Name); + oSheet.Cells[3, ordinate] = lR_Recipes[i].Set_Weight.ToString("0.000"); + oSheet.Cells[3, ordinate + 1] = lR_Recipes[i].Set_Error.ToString("0.000"); + oSheet.Cells[3, ordinate + 2] = "T(s)"; + ordinate += 3; + } + + //加和重量表头 + RangeBuild(oSheet, oSheet.Cells[2, ordinate], oSheet.Cells[2, ordinate + 2], "加和重量"); + oSheet.Cells[3, ordinate] = sumSet_Weight.ToString(); + oSheet.Cells[3, ordinate + 1] = sumSet_Error.ToString(); + oSheet.Cells[3, ordinate + 2] = "T(s)"; + ordinate += 3; + + //检量重量表头 + RangeBuild(oSheet, oSheet.Cells[2, ordinate], oSheet.Cells[2, ordinate + 3], "检量重量"); + oSheet.Cells[3, ordinate] = sumSet_Weight.ToString(); + oSheet.Cells[3, ordinate + 1] = sumSet_Error.ToString(); + oSheet.Cells[3, ordinate + 2] = "T(s)"; + oSheet.Cells[3, ordinate + 3] = "皮重"; + ordinate += 4; + } + + #endregion + + //将DataTable中的数据导入Excel中 + for (int i = 0; i < rowNum; i++) + { + for (int j = 0; j < columnNum; j++) + { + ///excel中的列是从1开始的 + xlApp.Cells[i + 4, j + 1] = tmpDataTable.Rows[i][j].ToString(); + } + } + ///保存,路径一块穿进去。否则回到一个很奇妙的地方,貌似是system32里 temp下.... + oSheet.SaveAs(strFileName); + } + + /// + /// 合并单元格业务方法 + /// + /// 工作簿中的sheet + /// 起始cell + /// 结束cell + /// 合并后单元格文本 + private static void RangeBuild(_Worksheet oSheet, object startcell, object endcell, string value) + { + Range excelRange = oSheet.Range[startcell, endcell];/*需要合并的单元格*/ + ///合并方法 + excelRange.Merge(excelRange.MergeCells);/*合并*/ + ///合并单元格之后,设置其中的文本 + excelRange.Value = value; + + //横向居中 + excelRange.HorizontalAlignment = XlVAlign.xlVAlignCenter; + //字体大小 + //range.Font.Size = 18; + //字体 + //range.Font.Name = "黑体"; + //行高 + //range.RowHeight = 24; + //自动调整列宽 + excelRange.EntireColumn.AutoFit(); + //填充颜色 + //range.Interior.ColorIndex = 20; + //设置单元格边框的粗细 + excelRange.Cells.Borders.LineStyle = 1; + } + + + } +} diff --git a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionAnalysisReport/InitFormAction.cs b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionAnalysisReport/InitFormAction.cs new file mode 100644 index 0000000..0260a9f --- /dev/null +++ b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionAnalysisReport/InitFormAction.cs @@ -0,0 +1,28 @@ +using Mesnac.Action.Base; +using Mesnac.Controls.Base; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Mesnac.Action.ChemicalWeighing.Report.ProductionAnalysisReport +{ + /// + /// 初始化生产分析报表 + /// + class InitFormAction : ChemicalWeighingAction, IAction + { + public void Run(RuntimeParameter runtime) + { + base.RunIni(runtime); //必须要调用的 + ICSharpCode.Core.LoggingService.Debug("生产报表-窗体初始化..."); + + List mcControllist = GetAllDbMCControlsByOption(DbOptionTypes.Query);//获取所有待初始化控件 + IBaseControl starttime = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "starttime").FirstOrDefault().BaseControl; + IBaseControl endtime = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "endtime").FirstOrDefault().BaseControl; + starttime.MCValue = DateTime.Parse("00:00:00"); + endtime.MCValue = DateTime.Parse("23:59:59"); + } + } +} diff --git a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionAnalysisReport/SelectAnalysisAction.cs b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionAnalysisReport/SelectAnalysisAction.cs new file mode 100644 index 0000000..d26d7a8 --- /dev/null +++ b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionAnalysisReport/SelectAnalysisAction.cs @@ -0,0 +1,344 @@ +using Mesnac.Action.Base; +using Mesnac.Controls.Base; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Mesnac.Action.ChemicalWeighing.Report.ProductionAnalysisReport +{ + /// + /// 生产质量分析 + /// + class SelectAnalysisAction : ChemicalWeighingAction, IAction + { + #region 字段定义 + + private RuntimeParameter _runtime; + private IBaseControl _startdate = null; //开始日期 + private IBaseControl _enddate = null; //结束日期 + private IBaseControl _starttime = null; //开始时间 + private IBaseControl _endtime = null; //结束时间 + private DbMCControl _recipeNameControl = null; //配方名Combobox控件 + private Control _clientGridControl = null; //多维表控件 + private DataTable dataTable = null; + + #endregion + + public void Run(RuntimeParameter runtime) + { + base.RunIni(runtime); + this._runtime = runtime; + + #region 获取开始/结束时间控件和质量分析控件 + + List mcControllist = GetAllDbMCControlsByOption(DbOptionTypes.Query);//获取所有待初始化控件 + //开始时间条件 + this._startdate = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "startdate").FirstOrDefault().BaseControl; + this._starttime = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "starttime").FirstOrDefault().BaseControl; + if(_startdate == null && _starttime == null) + { + ICSharpCode.Core.LoggingService.Debug("{生产分析报表} 缺少key值为startdate或者starttime的时间查询条件..."); + return; + } + string start = Convert.ToDateTime(_startdate.MCValue).ToString("yyyy-MM-dd") + " " + Convert.ToDateTime(_starttime.MCValue).ToShortTimeString(); + + //结束时间条件 + this._enddate = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "enddate").FirstOrDefault().BaseControl; + this._endtime = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "endtime").FirstOrDefault().BaseControl; + if (_enddate == null && _endtime == null) + { + ICSharpCode.Core.LoggingService.Debug("{生产分析报表} 缺少key值为enddate或者enddate的时间查询条件..."); + return; + } + string end = Convert.ToDateTime(_enddate.MCValue).ToString("yyyy-MM-dd") + " " + Convert.ToDateTime(_endtime.MCValue).ToShortTimeString(); + + this._recipeNameControl = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "[Pmt_recipe].[Recipe_Name]").FirstOrDefault(); + if (_recipeNameControl == null) + { + ICSharpCode.Core.LoggingService.Warn("{生产分析报表} 缺少配方名控件..."); + runtime.IsReturn = false; + return; + } + ComboBox recipeNameCB = this._recipeNameControl.BaseControl as ComboBox; + + bool gridFlag = false; + foreach (Control ib in GetAllControls()) + { + + if (ib.Name.Contains("MultiColHeaderDgv")) + { + this._clientGridControl = ib; + gridFlag = true; + } + if (gridFlag) + { + break; + } + } + if (_clientGridControl == null) + { + ICSharpCode.Core.LoggingService.Warn("{生产分析报表} 缺少质量分析MultiColHeaderDgv控件..."); + runtime.IsReturn = false; + return; + } + Mesnac.Controls.Default.MultiColHeaderDgv clientGrid = (this._clientGridControl as Mesnac.Controls.Default.MultiColHeaderDgv); + + dataTable = new DataTable("AnalysisDT"); + + #endregion + + #region 控件格式化 + + clientGrid.myColHeaderTreeView = null; + clientGrid.DataSource = null; + clientGrid.iNodeLevels = 0; + clientGrid.ColLists.Clear(); + clientGrid.ColumnHeadersHeight = 23; + clientGrid.ScrollBars = ScrollBars.Both; + clientGrid.AllowUserToAddRows = false; + clientGrid.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; + clientGrid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + clientGrid.ColumnHeadersDefaultCellStyle.Font = new System.Drawing.Font("宋体", 12); + clientGrid.DefaultCellStyle.Font = new System.Drawing.Font("宋体", 10); + + #endregion + + if (!string.IsNullOrEmpty(recipeNameCB.Text)) + { + List PlanIds = ReportHelper.GetPlanIDList(start,end,recipeNameCB.Text); + if (PlanIds.Count == 0) + { + MessageBox.Show("未查询到该时间段的配方计划信息"); + return; + } + + string lR_planID = PlanIds[0]; + + List lR_Recipes = ReportHelper.GetLR_recipeList(lR_planID); + TreeView treeView = new TreeView(); + + List lR_Lots = ReportHelper.GetAllLR_lotList(PlanIds); + List lR_Weighs = ReportHelper.GetAllLR_weighList(PlanIds, lR_Recipes.Count); + + #region 表头建立 + + BuildTableHead(treeView, lR_Recipes); + clientGrid.myColHeaderTreeView = treeView; + + #endregion + + #region 数据填充 + + DataTableWrite(lR_Lots, lR_Weighs); + + #endregion + + #region 增加最大最小平均合计值行 + + DataTableAdd(lR_Recipes.Count); + + #endregion + + clientGrid.DataSource = dataTable; + + } + } + + #region 建立表头结构 + + private void BuildTableHead(TreeView treeView, List lR_Recipes) + { + int treeIndex = 0; + TreeNode rootTreeNode = new TreeNode("物料"); + treeView.Nodes.Add(rootTreeNode); + TreeNode childTreeNodeSerial_Num = new TreeNode("序号"); + TreeNode childTreeNodeWeight_Time = new TreeNode("检量时间"); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodeSerial_Num); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodeWeight_Time); + dataTable.Columns.Add("Serial_Num", typeof(System.String)); + dataTable.Columns.Add("Weight_Time", typeof(System.String)); + decimal sumSet_Weight = 0.0M; + decimal sumSet_Error = 0.0M; + + if (lR_Recipes != null && lR_Recipes.Count > 0) + { + //物料表头 + for (int i = 0; i < lR_Recipes.Count; i++) + { + sumSet_Weight = sumSet_Weight + (decimal)lR_Recipes[i].Set_Weight; + sumSet_Error = sumSet_Error + (decimal)lR_Recipes[i].Set_Error; + TreeNode rootTreeNodeMaterialName = new TreeNode(lR_Recipes[i].Material_Name); + treeView.Nodes.Add(rootTreeNodeMaterialName); + treeIndex++; + TreeNode childTreeNodeSet_Weight = new TreeNode("重量(kg)"); + TreeNode childTreeNodeSet_Error = new TreeNode("误差(kg)"); + TreeNode childTreeNodeWaste_Time = new TreeNode("时间(s)"); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodeSet_Weight); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodeSet_Error); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodeWaste_Time); + dataTable.Columns.Add("Set_Weight" + treeIndex.ToString(), typeof(decimal)); + dataTable.Columns.Add("Set_Error" + treeIndex.ToString(), typeof(decimal)); + dataTable.Columns.Add("Waste_Time" + treeIndex.ToString(), typeof(decimal)); + } + + //加和重量表头 + TreeNode rootTreeNodeSum = new TreeNode("加和重量"); + treeView.Nodes.Add(rootTreeNodeSum); + treeIndex++; + TreeNode childTreeNodeSumSet_Weight = new TreeNode("重量(kg)"); + TreeNode childTreeNodeSumSet_Error = new TreeNode("误差(kg)"); + TreeNode childTreeNodesumWaste_Time = new TreeNode("T(s)"); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodeSumSet_Weight); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodeSumSet_Error); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodesumWaste_Time); + dataTable.Columns.Add("SumSet_Weight", typeof(decimal)); + dataTable.Columns.Add("SumSet_Error", typeof(decimal)); + dataTable.Columns.Add("SumWaste_Time", typeof(decimal)); + + //检量重量表头 + TreeNode rootTreeNodeCheck = new TreeNode("检量重量"); + treeView.Nodes.Add(rootTreeNodeCheck); + treeIndex++; + TreeNode childTreeNodeCheckSet_Weight = new TreeNode("重量(kg)"); + TreeNode childTreeNodeCheckSet_Error = new TreeNode("误差(kg)"); + TreeNode childTreeNodeCheckWaste_Time = new TreeNode("T(s)"); + TreeNode childTreeNodeCheckNet_Weight = new TreeNode("皮重"); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodeCheckSet_Weight); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodeCheckSet_Error); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodeCheckWaste_Time); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodeCheckNet_Weight); + dataTable.Columns.Add("CheckSet_Weight", typeof(decimal)); + dataTable.Columns.Add("CheckSet_Error", typeof(decimal)); + dataTable.Columns.Add("CheckWaste_Time", typeof(decimal)); + dataTable.Columns.Add("CheckNet_Weight", typeof(System.String)); + } + } + + #endregion + + #region 数据表填充 + + private void DataTableWrite(List lR_Lots, List lR_Weighs) + { + if (lR_Lots != null && lR_Lots.Count > 0) + { + for (int i = 0; i < lR_Lots.Count; i++) + { + int sumRealWaste_Time = 0; //加和时间 + + DataRow drow = dataTable.NewRow(); + //车次和检量时间数据填入 + drow["Serial_Num"] = lR_Lots[i].Serial_Num; + drow["Weight_Time"] = lR_Lots[i].Prd_date; + + //每车物料数据填入 + List curWeights = lR_Weighs.FindAll(x => x.Serial_Num == lR_Lots[i].Serial_Num); + if (curWeights != null && curWeights.Count > 0) + { + for (int j = 0; j < curWeights.Count; j++) + { + drow["Set_Weight" + (j + 1).ToString()] = curWeights[j].Real_Weight; + drow["Set_Error" + (j + 1).ToString()] = curWeights[j].Real_Error; + drow["Waste_Time" + (j + 1).ToString()] = curWeights[j].Waste_Time; + sumRealWaste_Time = sumRealWaste_Time + (int)curWeights[j].Waste_Time; + } + } + + //加和重量数据填入 + drow["SumSet_Weight"] = lR_Lots[i].Real_weight; + drow["SumSet_Error"] = lR_Lots[i].Real_weight; + drow["SumWaste_Time"] = sumRealWaste_Time; + + //检量重量数据填入 + + drow["CheckSet_Weight"] = lR_Lots[i].Real_weight; + drow["CheckSet_Error"] = lR_Lots[i].Real_weight; + drow["CheckWaste_Time"] = lR_Lots[i].Waste_Time; + drow["CheckNet_Weight"] = lR_Lots[i].Net_Weight; + + dataTable.Rows.Add(drow); + } + } + } + + #endregion + + #region DataTable新增最大最小平均合计值行 + + private void DataTableAdd(int mNum) + { + //最大值行 + DataRow drowMax = dataTable.NewRow(); + drowMax["Weight_Time"] = "最大值"; + for (int i=0; i + /// 生产报表导出Action + /// + class ExportAction : ChemicalWeighingAction, Base.IAction + { + private Control _clientDGV = null; //称量明细DGV + private DbMCControl _dgvLRPlan = null; //生产计划DGV + public void Run(RuntimeParameter runtime) + { + base.RunIni(runtime); //必须要调用的 + ICSharpCode.Core.LoggingService.Debug("生产报表-导出..."); + + this._dgvLRPlan = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "Base_PlanInfo").FirstOrDefault(); + DataGridView lR_planGridView = this._dgvLRPlan.BaseControl as DataGridView; + string lR_planID = lR_planGridView.SelectedRows[0].Cells["plan_Id"].Value as string; + string lR_reName = lR_planGridView.SelectedRows[0].Cells["recipe_Name"].Value as string; + string lR_starTime = lR_planGridView.SelectedRows[0].Cells["plan_beginTime"].Value as string; + string plan_count = Convert.ToInt32(lR_planGridView.SelectedRows[0].Cells["plan_Amount"].Value).ToString(); + string real_count = Convert.ToInt32(lR_planGridView.SelectedRows[0].Cells["real_Amount"].Value).ToString(); + string plan_State = lR_planGridView.SelectedRows[0].Cells["plan_State"].Value as string; + string plan_endTime = lR_planGridView.SelectedRows[0].Cells["plan_endTime"].Value as string; + string Shift_Name = lR_planGridView.SelectedRows[0].Cells["Shift_Name"].Value as string; + + + SaveFileDialog sfd = new SaveFileDialog(); + sfd.Filter = "xls files(*.xls)|*.xls"; + sfd.FileName = String.Format("生产报表_{0:yyyyMMdd}", DateTime.Now); + sfd.AddExtension = true; + DialogResult result = sfd.ShowDialog(); + if (result == DialogResult.OK) + { + + bool gridFlag = false; + foreach (Control ib in GetAllControls()) + { + + if (ib.Name.Contains("MultiColHeaderDgv")) + { + this._clientDGV = ib; + gridFlag = true; + } + if (gridFlag) + { + break; + } + } + if (_clientDGV == null) + { + ICSharpCode.Core.LoggingService.Warn("{生产报表-导出} 缺少DataGridView控件..."); + runtime.IsReturn = false; + return; + } + Mesnac.Controls.Default.MultiColHeaderDgv clientGrid = (this._clientDGV as Mesnac.Controls.Default.MultiColHeaderDgv); + System.Data.DataTable dt = clientGrid.DataSource as System.Data.DataTable; + + string fileName = sfd.FileName; + if (!String.IsNullOrEmpty(fileName)) + { + try + { + List lR_Recipes = ReportHelper.GetLR_recipeList(lR_planID); + + DataTabletoExcel(dt, fileName, lR_Recipes, lR_planID, lR_reName, plan_count, real_count, plan_State, lR_starTime, plan_endTime, Shift_Name); + string msg1 = StringParser.Parse(ResourceService.GetString("Mesnac_Action_ChemicalWeighing_Report_ProductionReport_ExportAction_msg1")); //导出生产报表数据至Excel成功! + ICSharpCode.Core.LoggingService.Info(msg1); + + #region 记录操作日志 + + base.DBLog(msg1); + + #endregion + + MessageBox.Show(msg1, Mesnac.Basic.LanguageHelper.Caption, MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception ex) + { + string msg2 = StringParser.Parse(ResourceService.GetString("Mesnac_Action_ChemicalWeighing_Report_ProductionReport_ExportAction_msg2")); //导出生产报表数据至Excel失败:{0}! + msg2 = String.Format(msg2, ex.Message); + ICSharpCode.Core.LoggingService.Error(msg2); + + #region 记录操作日志 + + base.DBLog(msg2); + + #endregion + + MessageBox.Show(msg2, Mesnac.Basic.LanguageHelper.WarnCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); + runtime.IsReturn = true; + return; + } + } + } + + } + + + public void DataTabletoExcel(System.Data.DataTable tmpDataTable, string strFileName, List lR_Recipes, string lR_planID , string reName,string plan_count, string real_count, string plan_State, string startTime,string plan_endTime,string Shift_Name) + { + ///先得到datatable的行数 + int rowNum = tmpDataTable.Rows.Count; + ///列数 + int columnNum = tmpDataTable.Columns.Count; + ///声明一个应用程序类实例 + Microsoft.Office.Interop.Excel.Application xlApp = new ApplicationClass(); + + //创建一个新工作簿 + Workbook xlBook = xlApp.Workbooks.Add(); + ///在工作簿中得到sheet。 + _Worksheet oSheet = (_Worksheet)xlBook.Worksheets[1]; + + #region 绘制列 + + //绘制配方名和开始时间 + oSheet.Cells[1, 1] = "计划号"; + oSheet.Cells[1, 2] = "配方名"; + oSheet.Cells[1, 3] = "计划数量"; + oSheet.Cells[1, 4] = "完成数量"; + oSheet.Cells[1, 5] = "完成数量"; + oSheet.Cells[1, 5] = "计划状态"; + oSheet.Cells[1, 6] = "开始时间"; + oSheet.Cells[1, 7] = "完成时间"; + oSheet.Cells[1, 8] = "计划班组"; + oSheet.Cells[2, 1] = lR_planID; + oSheet.Cells[2, 2] = reName; + oSheet.Cells[2, 3] = plan_count; + oSheet.Cells[2, 4] = real_count; + oSheet.Cells[2, 5] = plan_State; + oSheet.Cells[2, 6] = startTime; + oSheet.Cells[2, 7] = plan_endTime; + oSheet.Cells[2, 8] = Shift_Name; + + + + //自定义方法,绘制合并表头 + //RangeBuild(oSheet, oSheet.Cells[2, 1], oSheet.Cells[2, 2], "物料"); + oSheet.Cells[3, 1] = "车数"; + oSheet.Cells[3, 2] = "格数"; + oSheet.Cells[3, 3] = "完成时间"; + oSheet.Cells[3, 4] = "罐A应配"; + oSheet.Cells[3, 5] = "罐A实配"; + oSheet.Cells[3, 6] = "罐B应配"; + oSheet.Cells[3, 7] = "罐B实配"; + oSheet.Cells[3, 8] = "树脂应配"; + oSheet.Cells[3, 9] = "树脂实配"; + //oSheet.Cells[3, 10] = "VCC及GFA卸料速度"; + //oSheet.Cells[3, 11] = "混料运行速度"; + //oSheet.Cells[3, 12] = "混合机卸料速度"; + //oSheet.Cells[3, 13] = "混合机运行时间"; + //oSheet.Cells[3, 14] = "系数"; + + oSheet.Cells[3, 10] = "混料运行速度"; + oSheet.Cells[3, 11] = "混合机卸料速度"; + oSheet.Cells[3, 12] = "混合机运行时间"; + + + decimal sumSet_Weight = 0.0M; + decimal sumSet_Error = 0.0M; + + int ordinate = 3; + //if (lR_Recipes != null && lR_Recipes.Count > 0) + //{ + // //物料表头 + // for (int i = 0; i < lR_Recipes.Count; i++) + // { + // sumSet_Weight += (decimal)lR_Recipes[i].Set_Weight; + // sumSet_Error += (decimal)lR_Recipes[i].Set_Error; + + // RangeBuild(oSheet, oSheet.Cells[2, ordinate], oSheet.Cells[2, ordinate+2], lR_Recipes[i].Material_Name); + // oSheet.Cells[3, ordinate] = lR_Recipes[i].Set_Weight.ToString("0.000"); + // oSheet.Cells[3, ordinate+1] = lR_Recipes[i].Set_Error.ToString("0.000"); + // oSheet.Cells[3, ordinate+2] = "T(s)"; + // ordinate += 3; + // } + + // //加和重量表头 + // RangeBuild(oSheet, oSheet.Cells[2, ordinate], oSheet.Cells[2, ordinate + 2], "加和重量"); + // oSheet.Cells[3, ordinate] = sumSet_Weight.ToString(); + // oSheet.Cells[3, ordinate + 1] = sumSet_Error.ToString(); + // oSheet.Cells[3, ordinate + 2] = "T(s)"; + // ordinate += 3; + + // //检量重量表头 + // RangeBuild(oSheet, oSheet.Cells[2, ordinate], oSheet.Cells[2, ordinate + 3], "检量重量"); + // oSheet.Cells[3, ordinate] = sumSet_Weight.ToString(); + // oSheet.Cells[3, ordinate + 1] = sumSet_Error.ToString(); + // oSheet.Cells[3, ordinate + 2] = "T(s)"; + // oSheet.Cells[3, ordinate + 3] = "皮重"; + // ordinate += 4; + //} + + + + #endregion + + //将DataTable中的数据导入Excel中 + for (int i = 0; i < rowNum; i++) + { + for (int j = 0; j < columnNum; j++) + { + ///excel中的列是从1开始的 + xlApp.Cells[i + 4, j + 1] = tmpDataTable.Rows[i][j].ToString(); + } + } + ///保存,路径一块穿进去。否则回到一个很奇妙的地方,貌似是system32里 temp下.... + oSheet.SaveAs(strFileName); + } + + /// + /// 合并单元格业务方法 + /// + /// 工作簿中的sheet + /// 起始cell + /// 结束cell + /// 合并后单元格文本 + private static void RangeBuild(_Worksheet oSheet, object startcell, object endcell, string value) + { + Range excelRange = oSheet.Range[startcell, endcell];/*需要合并的单元格*/ + ///合并方法 + excelRange.Merge(excelRange.MergeCells);/*合并*/ + ///合并单元格之后,设置其中的文本 + excelRange.Value = value; + + //横向居中 + excelRange.HorizontalAlignment = XlVAlign.xlVAlignCenter; + //字体大小 + //range.Font.Size = 18; + //字体 + //range.Font.Name = "黑体"; + //行高 + //range.RowHeight = 24; + //自动调整列宽 + excelRange.EntireColumn.AutoFit(); + //填充颜色 + //range.Interior.ColorIndex = 20; + //设置单元格边框的粗细 + excelRange.Cells.Borders.LineStyle = 1; + } + + } +} diff --git a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionReport/InitFormAction.cs b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionReport/InitFormAction.cs new file mode 100644 index 0000000..36ad060 --- /dev/null +++ b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionReport/InitFormAction.cs @@ -0,0 +1,28 @@ +using Mesnac.Action.Base; +using Mesnac.Controls.Base; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Mesnac.Action.ChemicalWeighing.Report.ProductionReport +{ + /// + /// 生产报表初始化窗体 + /// + class InitFormAction : ChemicalWeighingAction, IAction + { + public void Run(RuntimeParameter runtime) + { + base.RunIni(runtime); //必须要调用的 + ICSharpCode.Core.LoggingService.Debug("生产报表-窗体初始化..."); + + List mcControllist = GetAllDbMCControlsByOption(DbOptionTypes.Query);//获取所有待初始化控件 + IBaseControl starttime = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "starttime").FirstOrDefault().BaseControl; + IBaseControl endtime = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "endtime").FirstOrDefault().BaseControl; + starttime.MCValue = DateTime.Parse("00:00:00"); + endtime.MCValue = DateTime.Parse("23:59:59"); + } + } +} diff --git a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionReport/SelectPlanAction.cs b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionReport/SelectPlanAction.cs new file mode 100644 index 0000000..0e2c90b --- /dev/null +++ b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionReport/SelectPlanAction.cs @@ -0,0 +1,112 @@ +using Mesnac.Action.Base; +using Mesnac.Codd.Session; +using Mesnac.Controls.Base; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Mesnac.Action.ChemicalWeighing.Report.ProductionReport +{ + /// + /// 生产报表中查询生产计划Action + /// + class SelectPlanAction : ChemicalWeighingAction, IAction + { + + private RuntimeParameter _runtime; + private IBaseControl _equipCode = null; //机台号 + private IBaseControl _version = null; //版本 + private IBaseControl _startdate = null; //开始日期 + private IBaseControl _enddate = null; //结束日期 + private IBaseControl _starttime = null; //开始时间 + private IBaseControl _endtime = null; //结束时间 + private IBaseControl _recipeName = null; //配方名 + private IBaseControl _shiftName = null; //班次 + private DbMCControl _dgvLRPlan = null; //生产计划DGV + + public void Run(RuntimeParameter runtime) + { + base.RunIni(runtime); + this._runtime = runtime; + ICSharpCode.Core.LoggingService.Debug("生产报表-生产计划-查询.."); + + + DbHelper dbHelper = Mesnac.Basic.DataSourceFactory.Instance.GetDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); + dbHelper.ClearParameter(); + + //StringBuilder sbSql = new StringBuilder(@"Select A.Plan_Id,A.Equip_Code,A.Plan_ID,A.Recipe_Code,A.Recipe_Name,A.Version,A.Mixer_Line,A.Plan_num,A.Real_Num,A.Start_Date,A.End_Date,A.Weight_Man,B.Shift_Name + // From LR_Plan A Left Join Pmt_ShifTime B On(A.Shift_ID = B.Shift_ID) WHERE 1=1 "); + + StringBuilder sbSql = new StringBuilder(@"select A.plan_Id,A.recipe_Name,A.plan_Amount,A.real_Amount,case plan_State when '0' then '待执行' when '1' then '执行中' when '2' then '已完成' when '3' then '已终止' else '异常' end as 'plan_State',A.plan_beginTime,A.plan_endTime,B.Shift_name as Shift_Name from Base_PlanInfo A Left Join Pmt_ShifTime B On(A.plan_Team = B.Shift_ID) WHERE 1=1 "); + + List mcControllist = GetAllDbMCControlsByOption(DbOptionTypes.Query);//获取所有待初始化控件 + //开始时间条件 + this._startdate = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "startdate").FirstOrDefault().BaseControl; + this._starttime = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "starttime").FirstOrDefault().BaseControl; + if (_startdate != null && _starttime != null) + { + sbSql.AppendLine(@"And A.plan_beginTime >= '" + Convert.ToDateTime(_startdate.MCValue).ToString("yyyy-MM-dd") + " " + Convert.ToDateTime(_starttime.MCValue).ToShortTimeString() + "' "); + } + else + { + ICSharpCode.Core.LoggingService.Debug("{生产报表} 缺少key值为startdate或者starttime的时间查询条件..."); + return; + } + //结束时间条件 + this._enddate = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "enddate").FirstOrDefault().BaseControl; + this._endtime = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "endtime").FirstOrDefault().BaseControl; + if (_enddate != null && _endtime != null) + { + sbSql.AppendLine(@"And A.plan_beginTime <= '" + Convert.ToDateTime(_enddate.MCValue).ToString("yyyy-MM-dd") + " " + Convert.ToDateTime(_endtime.MCValue).ToShortTimeString() + "' "); + } + else + { + ICSharpCode.Core.LoggingService.Debug("{生产报表} 缺少key值为enddate或者enddate的时间查询条件..."); + return; + } + //配方名和班次条件 + this._recipeName = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey == "[DataSource1].[Base_RecipeInfo].[recipe_Name]").FirstOrDefault().BaseControl; + this._shiftName = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey == "[DataSource1].[Pmt_Shiftime].[Shift_name]").FirstOrDefault().BaseControl; + if (!String.IsNullOrEmpty(this._recipeName.MCValue.ToString())) + { + sbSql.AppendLine(@"And A.Recipe_Name = '" + _recipeName.MCValue.ToString() + "' "); + } + if (!String.IsNullOrEmpty(this._shiftName.MCValue.ToString())) + { + sbSql.AppendLine(@"And Shift_Name = '" + _shiftName.MCValue.ToString() + "' "); + } + //机台号和版本条件 + //this._equipCode = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey == "EquipCode").FirstOrDefault().BaseControl; + //this._version = mcControllist.Where(t => t.BaseControl.MCKey != null && t.BaseControl.MCKey.ToLower() == "version").FirstOrDefault().BaseControl; + //if (!String.IsNullOrEmpty(this._equipCode.MCValue.ToString())) + //{ + // sbSql.AppendLine(@"And A.Equip_Code = '" + _equipCode.MCValue.ToString() + "' "); + //} + //if (!String.IsNullOrEmpty(this._version.MCValue.ToString())) + //{ + // sbSql.AppendLine(@"And A.Version = '" + _version.MCValue.ToString() + "' "); + //} + + sbSql.Append(" ORDER BY A.plan_beginTime desc"); + + dbHelper.CommandText = sbSql.ToString(); + dbHelper.CommandType = System.Data.CommandType.Text; + DataTable table = dbHelper.ToDataTable(); + + //刷新生产计划DataGridView数据 + this._dgvLRPlan = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "Base_PlanInfo").FirstOrDefault(); + if (_dgvLRPlan == null || !(_dgvLRPlan.BaseControl is DataGridView)) + { + ICSharpCode.Core.LoggingService.Warn("{生产报表-查询} 缺少生产计划DataGridView控件..."); + runtime.IsReturn = false; + return; + } + _dgvLRPlan.BaseControl.BindDataSource = null; + _dgvLRPlan.BaseControl.BindDataSource = table; + } + } +} diff --git a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionReport/SelectRowAction.cs b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionReport/SelectRowAction.cs new file mode 100644 index 0000000..b361f1c --- /dev/null +++ b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Report/ProductionReport/SelectRowAction.cs @@ -0,0 +1,537 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Data; +using Mesnac.Action.Base; +using Mesnac.Codd.Session; +using System.Reflection; +using Mesnac.Controls.Base; + +namespace Mesnac.Action.ChemicalWeighing.Report.ProductionReport +{ + /// + /// 生产报表业务 + /// + public class SelectRowAction : ChemicalWeighingAction,IAction + { + #region 字段定义 + + public static bool IsFirstRun = true; //是否首次运行 + private RuntimeParameter _runtime; + private Control _clientGridControl = null; //多维表控件 + private DbMCControl _dgvLRPlan = null; //生产计划DGV + private DataTable dataTable = null; + + #endregion + + public void Run(RuntimeParameter runtime) + { + base.RunIni(runtime); + this._runtime = runtime; + + #region 获取界面生产计划控件和称量明细控件 + + this._dgvLRPlan = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "Base_PlanInfo").FirstOrDefault(); + if (_dgvLRPlan == null || !(_dgvLRPlan.BaseControl is DataGridView)) + { + ICSharpCode.Core.LoggingService.Warn("{生产报表} 缺少生产计划DataGridView控件..."); + runtime.IsReturn = false; + return; + } + DataGridView lR_planGridView = this._dgvLRPlan.BaseControl as DataGridView; + + bool gridFlag = false; + foreach (Control ib in GetAllControls()) + { + + if (ib.Name.Contains("MultiColHeaderDgv")) + { + this._clientGridControl = ib; + gridFlag = true; + } + if (gridFlag) + { + break; + } + } + if (_clientGridControl == null) + { + ICSharpCode.Core.LoggingService.Warn("{生产报表} 缺少缺少称量名细MultiColHeaderDgv控件..."); + runtime.IsReturn = false; + return; + } + Mesnac.Controls.Default.MultiColHeaderDgv clientGrid = (this._clientGridControl as Mesnac.Controls.Default.MultiColHeaderDgv); + + dataTable = new DataTable("ProductionDT"); + + #endregion + + #region 控件格式化 + + clientGrid.myColHeaderTreeView = null; + clientGrid.DataSource = null; + clientGrid.iNodeLevels = 0; + clientGrid.ColLists.Clear(); + clientGrid.ColumnHeadersHeight = 23; + clientGrid.ScrollBars = ScrollBars.Both; + clientGrid.AllowUserToAddRows = false; + clientGrid.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; + clientGrid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + clientGrid.ColumnHeadersDefaultCellStyle.Font = new System.Drawing.Font("宋体", 12); + clientGrid.DefaultCellStyle.Font = new System.Drawing.Font("宋体",10); + clientGrid.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; + #endregion + + if (lR_planGridView.SelectedRows.Count == 1) + { + string lR_planID = lR_planGridView.SelectedRows[0].Cells["Plan_Id"].Value as string; + if (!string.IsNullOrEmpty(lR_planID)) + { + #region 数据源获取及定义 + + List lR_Lots = ReportHelper.GetLR_lotList(lR_planID); + List lR_Recipes = ReportHelper.GetLR_recipeList(lR_planID); + List lR_Weighs = ReportHelper.GetLR_weighList(lR_planID); + List RecordSaveDataInfo = ReportHelper.GetReportSaveDataList(lR_planID); + + TreeView treeView = new TreeView(); + + #endregion + + #region 表头建立 + GHBuildTableHead(treeView, RecordSaveDataInfo); + //BuildTableHead(treeView, lR_Recipes); + //clientGrid.myColHeaderTreeView = treeView; + + #endregion + + #region 数据填充 + GHDataTableWrite(RecordSaveDataInfo); + + //DataTableWrite(lR_Lots, lR_Recipes, lR_Weighs); + + #endregion + + #region 增加最大最小平均合计值行 + GHDataTableAdd(RecordSaveDataInfo.Count); + //DataTableAdd(lR_Recipes.Count); + + #endregion + + clientGrid.DataSource = dataTable; + + for (int i = 0; i < clientGrid.Columns.Count; i++) + { + clientGrid.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable; + } + } + } + } + + #region 方法定义 + + #region 建立表头结构 + private void GHBuildTableHead(TreeView treeView, List RecordSaveDataInfo) + { + try + { + //decimal sumSet_Weight = 0.0M; + //decimal sumSet_Error = 0.0M; + //if (RecordSaveDataInfo != null && RecordSaveDataInfo.Count > 0) + //{ + // for (int i = 0; i < RecordSaveDataInfo.Count; i++) + // { + // sumSet_Weight = sumSet_Weight + (decimal)RecordSaveDataInfo[i].SaveVCCAct; + // } + //} + + //TreeNode childTreeNodeSaveFinishedNum = new TreeNode("车数"); + //treeView.Nodes.Add(childTreeNodeSaveFinishedNum); + //TreeNode childTreeNodeSaveRecordTime = new TreeNode("记录时间"); + //treeView.Nodes.Add(childTreeNodeSaveRecordTime); + //TreeNode childTreeNodeSaveCol = new TreeNode("格数"); + //treeView.Nodes.Add(childTreeNodeSaveCol); + //TreeNode childTreeNodeSaveVCCSet = new TreeNode(" VCC应配"); + //treeView.Nodes.Add(childTreeNodeSaveVCCSet); + //TreeNode childTreeNodeSaveVCCAct = new TreeNode(" VCC实配"); + //treeView.Nodes.Add(childTreeNodeSaveVCCAct); + //TreeNode childTreeNodeSaveGFASet = new TreeNode("GFA应配"); + //treeView.Nodes.Add(childTreeNodeSaveGFASet); + //TreeNode childTreeNodeSaveGFAAct = new TreeNode("GFA实配"); + //treeView.Nodes.Add(childTreeNodeSaveGFAAct); + //TreeNode childTreeNodeSave3thSet = new TreeNode("树脂应配"); + //treeView.Nodes.Add(childTreeNodeSave3thSet); + //TreeNode childTreeNodeSave3thAct = new TreeNode("树脂实配"); + //treeView.Nodes.Add(childTreeNodeSave3thAct); + //TreeNode childTreeNodeSaveLevel = new TreeNode("系数"); + //treeView.Nodes.Add(childTreeNodeSaveLevel); + //TreeNode childTreeNodeSaveFillTime = new TreeNode("VCC+GFA卸料速度"); + //treeView.Nodes.Add(childTreeNodeSaveFillTime); + //TreeNode childTreeNodeSaveSpeed1 = new TreeNode("混料运行速度"); + //treeView.Nodes.Add(childTreeNodeSaveSpeed1); + //TreeNode childTreeNodeSaveSpeed2 = new TreeNode("混合机卸料速度"); + //treeView.Nodes.Add(childTreeNodeSaveSpeed2); + //TreeNode childTreeNodeSaveTime = new TreeNode("混料运行时间"); + //treeView.Nodes.Add(childTreeNodeSaveTime); + + dataTable.Columns.Add("车数", typeof(System.String)); + dataTable.Columns.Add("格数", typeof(System.String)); + dataTable.Columns.Add("记录时间", typeof(System.String)); + dataTable.Columns.Add("罐A应配", typeof(decimal)); + dataTable.Columns.Add("罐A实配", typeof(decimal)); + dataTable.Columns.Add("罐B应配", typeof(decimal)); + dataTable.Columns.Add("罐B实配", typeof(decimal)); + dataTable.Columns.Add("树脂应配", typeof(decimal)); + dataTable.Columns.Add("树脂实配", typeof(decimal)); + dataTable.Columns.Add("罐A二次应配", typeof(decimal)); + dataTable.Columns.Add("罐A二次实配", typeof(decimal)); + dataTable.Columns.Add("罐B二次应配", typeof(decimal)); + dataTable.Columns.Add("罐B二次实配", typeof(decimal)); + //dataTable.Columns.Add("VCC及GFA卸料速度", typeof(decimal)); + dataTable.Columns.Add("混料运行速度", typeof(decimal)); + dataTable.Columns.Add("混合机卸料速度", typeof(decimal)); + dataTable.Columns.Add("混料运行时间", typeof(decimal)); + + //dataTable.Columns.Add("系数", typeof(decimal)); + //dataTable.Columns.Add("SaveFinishedNum", typeof(System.String)); + //dataTable.Columns.Add("Record_Time", typeof(System.String)); + //dataTable.Columns.Add("SaveCol", typeof(System.String)); + //dataTable.Columns.Add("SaveVCCSet", typeof(decimal)); + //dataTable.Columns.Add("SaveVCCAct", typeof(decimal)); + //dataTable.Columns.Add("SaveGFASet", typeof(decimal)); + //dataTable.Columns.Add("SaveGFAAct", typeof(decimal)); + //dataTable.Columns.Add("Save3thSet", typeof(decimal)); + //dataTable.Columns.Add("Save3thAct", typeof(decimal)); + //dataTable.Columns.Add("SaveFillTime", typeof(decimal)); + //dataTable.Columns.Add("SaveSpeed1", typeof(decimal)); + //dataTable.Columns.Add("SaveSpeed2", typeof(decimal)); + //dataTable.Columns.Add("SaveTime", typeof(decimal)); + //dataTable.Columns.Add("SaveLevel", typeof(decimal)); + } + catch (Exception ex) + { + + } + } + + + private void BuildTableHead(TreeView treeView, List lR_Recipes) + { + int treeIndex = 0; + TreeNode rootTreeNode = new TreeNode("物料"); + treeView.Nodes.Add(rootTreeNode); + TreeNode childTreeNodeSerial_Num = new TreeNode("车次"); + TreeNode childTreeNodeWeight_Time = new TreeNode("检量时间"); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodeSerial_Num); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodeWeight_Time); + dataTable.Columns.Add("Serial_Num", typeof(System.String)); + dataTable.Columns.Add("Weight_Time", typeof(System.String)); + decimal sumSet_Weight = 0.0M; + decimal sumSet_Error = 0.0M; + + if (lR_Recipes != null && lR_Recipes.Count > 0) + { + //物料表头 + for (int i = 0; i < lR_Recipes.Count; i++) + { + sumSet_Weight = sumSet_Weight + (decimal)lR_Recipes[i].Set_Weight; + sumSet_Error = sumSet_Error + (decimal)lR_Recipes[i].Set_Error; + TreeNode rootTreeNodeMaterialName = new TreeNode(lR_Recipes[i].Material_Name); + treeView.Nodes.Add(rootTreeNodeMaterialName); + treeIndex++; + TreeNode childTreeNodeSet_Weight = new TreeNode(lR_Recipes[i].Set_Weight.ToString("0.000")); + TreeNode childTreeNodeSet_Error = new TreeNode(lR_Recipes[i].Set_Error.ToString("0.000")); + TreeNode childTreeNodeWaste_Time = new TreeNode("T(s)"); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodeSet_Weight); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodeSet_Error); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodeWaste_Time); + dataTable.Columns.Add("Set_Weight" + treeIndex.ToString(), typeof(decimal)); + dataTable.Columns.Add("Set_Error" + treeIndex.ToString(), typeof(decimal)); + dataTable.Columns.Add("Waste_Time" + treeIndex.ToString(), typeof(decimal)); + } + + //加和重量表头 + TreeNode rootTreeNodeSum = new TreeNode("加和重量"); + treeView.Nodes.Add(rootTreeNodeSum); + treeIndex++; + TreeNode childTreeNodeSumSet_Weight = new TreeNode(sumSet_Weight.ToString()); + TreeNode childTreeNodeSumSet_Error = new TreeNode(sumSet_Error.ToString()); + TreeNode childTreeNodesumWaste_Time = new TreeNode("T(s)"); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodeSumSet_Weight); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodeSumSet_Error); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodesumWaste_Time); + dataTable.Columns.Add("SumSet_Weight", typeof(decimal)); + dataTable.Columns.Add("SumSet_Error", typeof(decimal)); + dataTable.Columns.Add("SumWaste_Time", typeof(decimal)); + + //检量重量表头 + TreeNode rootTreeNodeCheck = new TreeNode("检量重量"); + treeView.Nodes.Add(rootTreeNodeCheck); + treeIndex++; + TreeNode childTreeNodeCheckSet_Weight = new TreeNode(sumSet_Weight.ToString()); + TreeNode childTreeNodeCheckSet_Error = new TreeNode(sumSet_Error.ToString()); + TreeNode childTreeNodeCheckWaste_Time = new TreeNode("T(s)"); + TreeNode childTreeNodeCheckNet_Weight = new TreeNode("皮重"); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodeCheckSet_Weight); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodeCheckSet_Error); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodeCheckWaste_Time); + treeView.Nodes[treeIndex].Nodes.Add(childTreeNodeCheckNet_Weight); + dataTable.Columns.Add("CheckSet_Weight", typeof(decimal)); + dataTable.Columns.Add("CheckSet_Error", typeof(decimal)); + dataTable.Columns.Add("CheckWaste_Time", typeof(decimal)); + dataTable.Columns.Add("CheckNet_Weight", typeof(System.String)); + } + } + + #endregion + + #region 数据表填充 + private void GHDataTableWrite(List RecordSaveDataInfo) + { + try + { + if (RecordSaveDataInfo != null && RecordSaveDataInfo.Count > 0) + { + for (int i = 0; i < RecordSaveDataInfo.Count; i++) + { + DataRow drow = dataTable.NewRow(); + drow["车数"] = RecordSaveDataInfo[i].SaveFinishedNum; + drow["格数"] = RecordSaveDataInfo[i].SaveCol; + drow["记录时间"] = RecordSaveDataInfo[i].RecordTime; + + drow["罐A应配"] = RecordSaveDataInfo[i].SaveVCCSet; + drow["罐A实配"] = RecordSaveDataInfo[i].SaveVCCAct; + drow["罐B应配"] = RecordSaveDataInfo[i].SaveGFASet; + drow["罐B实配"] = RecordSaveDataInfo[i].SaveGFAAct; + drow["树脂应配"] = RecordSaveDataInfo[i].Save3thSet; + drow["树脂实配"] = RecordSaveDataInfo[i].Save3thAct; + drow["罐A二次应配"] = RecordSaveDataInfo[i].SaveVCC2thSet; + drow["罐A二次实配"] = RecordSaveDataInfo[i].SaveVCC2thAct; + drow["罐B二次应配"] = RecordSaveDataInfo[i].SaveGFA2thSet; + drow["罐B二次实配"] = RecordSaveDataInfo[i].SaveGFA2thAct; + + //drow["VCC及GFA卸料速度"] = RecordSaveDataInfo[i].SaveFillTime; + drow["混料运行速度"] = RecordSaveDataInfo[i].SaveSpeed1; + drow["混合机卸料速度"] = RecordSaveDataInfo[i].SaveSpeed2; + drow["混料运行时间"] = RecordSaveDataInfo[i].SaveTime; + //drow["系数"] = RecordSaveDataInfo[i].SaveLevel; + dataTable.Rows.Add(drow); + } + } + } + catch (Exception ex) + { + + throw; + } + } + + + private void DataTableWrite(List lR_Lots, List lR_Recipes, List lR_Weighs) + { + if(lR_Lots != null && lR_Lots.Count > 0) + { + for(int i = 0; i < lR_Lots.Count; i++) + { + int sumRealWaste_Time = 0; //加和时间 + + DataRow drow = dataTable.NewRow(); + //车次和检量时间数据填入 + drow["Serial_Num"] = lR_Lots[i].Serial_Num; + drow["Weight_Time"] = lR_Lots[i].Prd_date; + + //每车物料数据填入 + List curWeights = lR_Weighs.FindAll(x => x.Serial_Num == lR_Lots[i].Serial_Num); + if(curWeights != null && curWeights.Count > 0) + { + for(int j = 0;j< curWeights.Count; j++) + { + drow["Set_Weight" + (j + 1).ToString()] = curWeights[j].Real_Weight; + drow["Set_Error" + (j + 1).ToString()] = curWeights[j].Real_Error; + drow["Waste_Time" + (j + 1).ToString()] = curWeights[j].Waste_Time; + sumRealWaste_Time = sumRealWaste_Time + (int)curWeights[j].Waste_Time; + } + } + + //加和重量数据填入 + drow["SumSet_Weight"] = lR_Lots[i].Real_weight; + drow["SumSet_Error"] = lR_Lots[i].Real_Error; + drow["SumWaste_Time"] = sumRealWaste_Time; + + //检量重量数据填入 + + drow["CheckSet_Weight"] = lR_Lots[i].Real_weight; + drow["CheckSet_Error"] = lR_Lots[i].Real_Error; + drow["CheckWaste_Time"] = lR_Lots[i].Waste_Time; + drow["CheckNet_Weight"] = lR_Lots[i].Net_Weight; + + dataTable.Rows.Add(drow); + } + } + } + + #endregion + + #region DataTable新增最大最小平均合计值行 + + private void GHDataTableAdd(int mNun) + { + try + { + DataRow drowMax = dataTable.NewRow(); + drowMax["记录时间"] = "最大值"; + drowMax["罐A应配"] = dataTable.Compute("max(罐A应配)", ""); + drowMax["罐A实配"] = dataTable.Compute("max(罐A实配)", ""); + drowMax["罐B应配"] = dataTable.Compute("max(罐B应配)", ""); + drowMax["罐B实配"] = dataTable.Compute("max(罐B实配)", ""); + drowMax["树脂应配"] = dataTable.Compute("max(树脂应配)", ""); + drowMax["树脂实配"] = dataTable.Compute("max(树脂实配)", ""); + drowMax["罐A二次应配"] = dataTable.Compute("max(罐A二次应配)", ""); + drowMax["罐A二次实配"] = dataTable.Compute("max(罐A二次实配)", ""); + drowMax["罐B二次应配"] = dataTable.Compute("max(罐B二次应配)", ""); + drowMax["罐B二次实配"] = dataTable.Compute("max(罐B二次实配)", ""); + + //drowMax["VCC及GFA卸料速度"] = dataTable.Compute("max(VCC及GFA卸料速度)", ""); + drowMax["混料运行速度"] = dataTable.Compute("max(混料运行速度)", ""); + drowMax["混合机卸料速度"] = dataTable.Compute("max(混合机卸料速度)", ""); + drowMax["混料运行时间"] = dataTable.Compute("max(混料运行时间)", ""); + //drowMax["系数"] = dataTable.Compute("max(系数)", ""); + DataRow drowMin = dataTable.NewRow(); + drowMin["记录时间"] = "最小值"; + drowMin["罐A应配"] = dataTable.Compute("min(罐A应配)", ""); + drowMin["罐A实配"] = dataTable.Compute("min(罐A实配)", ""); + drowMin["罐B应配"] = dataTable.Compute("min(罐B应配)", ""); + drowMin["罐B实配"] = dataTable.Compute("min(罐B实配)", ""); + drowMin["树脂应配"] = dataTable.Compute("min(树脂应配)", ""); + drowMin["树脂实配"] = dataTable.Compute("min(树脂实配)", ""); + drowMin["罐A二次应配"] = dataTable.Compute("min(罐A二次应配)", ""); + drowMin["罐A二次实配"] = dataTable.Compute("min(罐A二次实配)", ""); + drowMin["罐B二次应配"] = dataTable.Compute("min(罐B二次应配)", ""); + drowMin["罐B二次实配"] = dataTable.Compute("min(罐B二次实配)", ""); + //drowMin["VCC及GFA卸料速度"] = dataTable.Compute("min(VCC及GFA卸料速度)", ""); + drowMin["混料运行速度"] = dataTable.Compute("min(混料运行速度)", ""); + drowMin["混合机卸料速度"] = dataTable.Compute("min(混合机卸料速度)", ""); + drowMin["混料运行时间"] = dataTable.Compute("min(混料运行时间)", ""); + //drowMin["系数"] = dataTable.Compute("min(系数)", ""); + DataRow drowAvg = dataTable.NewRow(); + drowAvg["记录时间"] = "平均值"; + drowAvg["罐A应配"] = dataTable.Compute("avg(罐A应配)", ""); + drowAvg["罐A实配"] = dataTable.Compute("avg(罐A实配)", ""); + drowAvg["罐B应配"] = dataTable.Compute("avg(罐B应配)", ""); + drowAvg["罐B实配"] = dataTable.Compute("avg(罐B实配)", ""); + drowAvg["树脂应配"] = dataTable.Compute("avg(树脂应配)", ""); + drowAvg["树脂实配"] = dataTable.Compute("avg(树脂实配)", ""); + drowAvg["罐A二次应配"] = dataTable.Compute("avg(罐A二次应配)", ""); + drowAvg["罐A二次实配"] = dataTable.Compute("avg(罐A二次实配)", ""); + drowAvg["罐B二次应配"] = dataTable.Compute("avg(罐B二次应配)", ""); + drowAvg["罐B二次实配"] = dataTable.Compute("avg(罐B二次实配)", ""); + //drowAvg["VCC及GFA卸料速度"] = dataTable.Compute("avg(VCC及GFA卸料速度)", ""); + drowAvg["混料运行速度"] = dataTable.Compute("avg(混料运行速度)", ""); + drowAvg["混合机卸料速度"] = dataTable.Compute("avg(混合机卸料速度)", ""); + drowAvg["混料运行时间"] = dataTable.Compute("avg(混料运行时间)", ""); + //drowAvg["系数"] = dataTable.Compute("avg(系数)", ""); + DataRow drowSum = dataTable.NewRow(); + drowSum["记录时间"] = "合计"; + drowSum["罐A应配"] = dataTable.Compute("sum([罐A应配])", ""); + drowSum["罐A实配"] = dataTable.Compute("sum([罐A实配])", ""); + drowSum["罐B应配"] = dataTable.Compute("sum([罐B应配])", ""); + drowSum["罐B实配"] = dataTable.Compute("sum([罐B实配])", ""); + drowSum["树脂应配"] = dataTable.Compute("sum([树脂应配])", ""); + drowSum["树脂实配"] = dataTable.Compute("sum([树脂实配])", ""); + drowSum["罐A二次应配"] = dataTable.Compute("sum([罐A二次应配])", ""); + drowSum["罐A二次实配"] = dataTable.Compute("sum([罐A二次实配])", ""); + drowSum["罐B二次应配"] = dataTable.Compute("sum([罐B二次应配])", ""); + drowSum["罐B二次实配"] = dataTable.Compute("sum([罐B二次实配])", ""); + //drowSum["VCC及GFA卸料速度"] = dataTable.Compute("sum([VCC及GFA卸料速度])", ""); + drowSum["混料运行速度"] = dataTable.Compute("sum([混料运行速度])", ""); + drowSum["混合机卸料速度"] = dataTable.Compute("sum(混合机卸料速度)", ""); + drowSum["混料运行时间"] = dataTable.Compute("sum([混料运行时间])", ""); + //drowSum["系数"] = dataTable.Compute("sum([系数])", ""); + dataTable.Rows.Add(drowMax); + dataTable.Rows.Add(drowMin); + dataTable.Rows.Add(drowAvg); + dataTable.Rows.Add(drowSum); + } + catch (Exception ex) + { + + throw; + } + } + private void DataTableAdd(int mNum) + { + //最大值行 + DataRow drowMax = dataTable.NewRow(); + drowMax["Weight_Time"] = "最大值"; + for (int i = 0; i < mNum; i++) + { + drowMax["Set_Weight" + (i + 1).ToString()] = dataTable.Compute("max(Set_Weight" + (i + 1).ToString() + ")", ""); + drowMax["Set_Error" + (i + 1).ToString()] = dataTable.Compute("max(Set_Error" + (i + 1).ToString() + ")", ""); + drowMax["Waste_Time" + (i + 1).ToString()] = dataTable.Compute("max(Waste_Time" + (i + 1).ToString() + ")", ""); + } + drowMax["SumSet_Weight"] = dataTable.Compute("max(SumSet_Weight)", ""); + drowMax["SumSet_Error"] = dataTable.Compute("max(SumSet_Error)", ""); + drowMax["SumWaste_Time"] = dataTable.Compute("max(SumWaste_Time)", ""); + drowMax["CheckSet_Weight"] = dataTable.Compute("max(CheckSet_Weight)", ""); + drowMax["CheckSet_Error"] = dataTable.Compute("max(CheckSet_Error)", ""); + drowMax["CheckWaste_Time"] = dataTable.Compute("max(CheckWaste_Time)", ""); + //最小值行 + DataRow drowMin = dataTable.NewRow(); + drowMin["Weight_Time"] = "最小值"; + for (int i = 0; i < mNum; i++) + { + drowMin["Set_Weight" + (i + 1).ToString()] = dataTable.Compute("min(Set_Weight" + (i + 1).ToString() + ")", ""); + drowMin["Set_Error" + (i + 1).ToString()] = dataTable.Compute("min(Set_Error" + (i + 1).ToString() + ")", ""); + drowMin["Waste_Time" + (i + 1).ToString()] = dataTable.Compute("min(Waste_Time" + (i + 1).ToString() + ")", ""); + } + drowMin["SumSet_Weight"] = dataTable.Compute("min(SumSet_Weight)", ""); + drowMin["SumSet_Error"] = dataTable.Compute("min(SumSet_Error)", ""); + drowMin["SumWaste_Time"] = dataTable.Compute("min(SumWaste_Time)", ""); + drowMin["CheckSet_Weight"] = dataTable.Compute("min(CheckSet_Weight)", ""); + drowMin["CheckSet_Error"] = dataTable.Compute("min(CheckSet_Error)", ""); + drowMin["CheckWaste_Time"] = dataTable.Compute("min(CheckWaste_Time)", ""); + //平均值行 + DataRow drowAvg = dataTable.NewRow(); + drowAvg["Weight_Time"] = "平均值"; + for (int i = 0; i < mNum; i++) + { + drowAvg["Set_Weight" + (i + 1).ToString()] = dataTable.Compute("avg(Set_Weight" + (i + 1).ToString() + ")", ""); + drowAvg["Set_Error" + (i + 1).ToString()] = dataTable.Compute("avg(Set_Error" + (i + 1).ToString() + ")", ""); + drowAvg["Waste_Time" + (i + 1).ToString()] = dataTable.Compute("avg(Waste_Time" + (i + 1).ToString() + ")", ""); + } + drowAvg["SumSet_Weight"] = dataTable.Compute("avg(SumSet_Weight)", ""); + drowAvg["SumSet_Error"] = dataTable.Compute("avg(SumSet_Error)", ""); + drowAvg["SumWaste_Time"] = dataTable.Compute("avg(SumWaste_Time)", ""); + drowAvg["CheckSet_Weight"] = dataTable.Compute("avg(CheckSet_Weight)", ""); + drowAvg["CheckSet_Error"] = dataTable.Compute("avg(CheckSet_Error)", ""); + drowAvg["CheckWaste_Time"] = dataTable.Compute("avg(CheckWaste_Time)", ""); + //合计 + DataRow drowSum = dataTable.NewRow(); + drowSum["Weight_Time"] = "合计"; + for (int i = 0; i < mNum; i++) + { + drowSum["Set_Weight" + (i + 1).ToString()] = dataTable.Compute("sum(Set_Weight" + (i + 1).ToString() + ")", ""); + drowSum["Set_Error" + (i + 1).ToString()] = dataTable.Compute("sum(Set_Error" + (i + 1).ToString() + ")", ""); + drowSum["Waste_Time" + (i + 1).ToString()] = dataTable.Compute("sum(Waste_Time" + (i + 1).ToString() + ")", ""); + } + drowSum["SumSet_Weight"] = dataTable.Compute("sum(SumSet_Weight)", ""); + drowSum["SumSet_Error"] = dataTable.Compute("sum(SumSet_Error)", ""); + drowSum["SumWaste_Time"] = dataTable.Compute("sum(SumWaste_Time)", ""); + drowSum["CheckSet_Weight"] = dataTable.Compute("sum(CheckSet_Weight)", ""); + drowSum["CheckSet_Error"] = dataTable.Compute("sum(CheckSet_Error)", ""); + drowSum["CheckWaste_Time"] = dataTable.Compute("sum(CheckWaste_Time)", ""); + + dataTable.Rows.Add(drowMax); + dataTable.Rows.Add(drowMin); + dataTable.Rows.Add(drowAvg); + dataTable.Rows.Add(drowSum); + } + + #endregion + + #endregion + } +} diff --git a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Test/TestAction.cs b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Test/TestAction.cs index 5a8901f..254eb68 100644 --- a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Test/TestAction.cs +++ b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Test/TestAction.cs @@ -42,6 +42,12 @@ namespace Mesnac.Action.ChemicalWeighing.Test .ToDataTable("*"); this.startdate.MCValue = DateTime.Now.ToString() + dt2.Rows.Count; + + + + DbHelper dbHelper = Mesnac.Basic.DataSourceFactory.Instance.GetDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); + + var dt= dbHelper.GetDataTableBySql("select * from ActionCode"); } List mcControllist; IBaseControl startdate; diff --git a/Controls/Mesnac.Controls.ChemicalWeighing/Resources/解包室动图.psd b/Controls/Mesnac.Controls.ChemicalWeighing/Resources/解包室动图.psd new file mode 100644 index 0000000000000000000000000000000000000000..5e46de4ace10e17e6e13e19a4f68d8a71f6fff3c GIT binary patch literal 210351 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
S5lVo*oKMBM)~s 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

nGw0MR{f5 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 O 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/上辅机/PLC管理.PLC管理.xml b/Main/MCEdit/Data/EventConfig/上辅机/PLC管理.PLC管理.xml new file mode 100644 index 0000000..5b5b329 --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/上辅机/PLC管理.PLC管理.xml @@ -0,0 +1,93 @@ + + + + + + + 实时记录保存 + 实时记录保存 + + + + + 数据存盘 + 数据存盘 + + + + + 数据库写入PLC + 数据库写入PLC + + + + + 文本框写入PLC + 文本框写入PLC + + + + + + 称量参数下载 + 称量参数下载 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/上辅机/业务测试.xml b/Main/MCEdit/Data/EventConfig/上辅机/业务测试.xml new file mode 100644 index 0000000..32652aa --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/上辅机/业务测试.xml @@ -0,0 +1,49 @@ + + + + + + 业务测试 + 业务测试 + + + 上辅机业务测试 + 上辅机业务测试 + + + 胶料称变量测试 + 胶料称监控画面变量测试 + + + 浮点数写入测试 + 浮点数写入测试 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/上辅机/基础数据维护.xml b/Main/MCEdit/Data/EventConfig/上辅机/基础数据维护.xml new file mode 100644 index 0000000..5fe3334 --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/上辅机/基础数据维护.xml @@ -0,0 +1,229 @@ + + + + + + 导入报警参数 + 从老版本上辅机SCHEME.INI文件导入AlarmName信息至Pmt_AlarmInfo表 + + + + + 密炼条件同步 + 同步网络数据库的密炼条件数据 + + + + + 同步班次 + 从网络同步班次数据 + + + 同步班组 + 从网络同步班组数据 + + + + + 添加 + 添加原材料数据 + + + 原材料同步 + 同步网络数据库的原材料数据 + + + 选择罐类别 + 选择罐类别 + + + 日罐选择罐类别 + 日罐选择罐类别 + + + 罐参数选择罐号 + 罐参数选择罐号 + + + + + 同步日罐设置 + 从网络同步日罐物料参数设置 + + + 添加 + 添加日罐信息 + + + 修改 + 修改日罐信息 + + + + + + 添加 + 添加称量物料参数数据 + + + 修改 + 修改称量物料参数数据 + + + 从PLC获取称量物料参数 + 从PLC获取称量物料参数 + + + + + 同步配方类型 + 从网络库同步配方类型数据 + + + 下载所有配方 + 从网络库下载本机台所有配方数据 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/上辅机/基础数据维护.物料细类.xml b/Main/MCEdit/Data/EventConfig/上辅机/基础数据维护.物料细类.xml new file mode 100644 index 0000000..9b2934d --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/上辅机/基础数据维护.物料细类.xml @@ -0,0 +1,24 @@ + + + + + + 窗体初始化 + 窗体初始化 + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/上辅机/基础界面.单表界面.xml b/Main/MCEdit/Data/EventConfig/上辅机/基础界面.单表界面.xml new file mode 100644 index 0000000..05d6fcc --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/上辅机/基础界面.单表界面.xml @@ -0,0 +1,114 @@ + + + + + + 界面初始化 + 界面初始化 + + + 添加 + 添加信息 + + + 删除 + 删除选中的信息 + + + 修改 + 配方管理中的条件信息查询 + + + 查询 + 配方管理中的条件信息查询 + + + 清空界面 + 选择表格中的行 + + + 选择行 + 选择表格中的行 + + + 上一行 + 选择表格中的行 + + + 下一行 + 选择表格中的行 + + + 第一行 + 选择表格中的行 + + + 最后一行 + 选择表格中的行 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/上辅机/工艺回溯.xml b/Main/MCEdit/Data/EventConfig/上辅机/工艺回溯.xml new file mode 100644 index 0000000..fa9aee0 --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/上辅机/工艺回溯.xml @@ -0,0 +1,24 @@ + + + + + + 工艺回溯 + 工艺回溯 + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/上辅机/工艺配方.配方管理.xml b/Main/MCEdit/Data/EventConfig/上辅机/工艺配方.配方管理.xml new file mode 100644 index 0000000..1444092 --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/上辅机/工艺配方.配方管理.xml @@ -0,0 +1,182 @@ + + + + + + 加载 + 初始化信息 + + + 新建 + 新建 + + + 编辑 + 编辑(配方输入项进入到编辑状态) + + + 只读 + 只读(禁用配方输入项) + + + 保存 + 保存正在编辑的配方 + + + 配方另存 + 当前配方另存 + + + 删除 + 删除当前选中的配方 + + + 选择配方 + 查询选择配方 + + + 全部配方 + 查询全部配方 + + + 正用配方 + 查询正用配方 + + + 停用配方 + 查询停用配方 + + + 作废配方 + 查询作废配方 + + + 配方查询放大器 + 配方查询放大器 + + + 更新配方 + 从网络更新当前配方 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/上辅机/报表.批报表.xml b/Main/MCEdit/Data/EventConfig/上辅机/报表.批报表.xml new file mode 100644 index 0000000..6af4834 --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/上辅机/报表.批报表.xml @@ -0,0 +1,49 @@ + + + + + + 窗体初始化 + 车报表查询条件初始化 + + + 查询 + 车报表查询 + + + 显示明细 + 显示明细 + + + 显示重量明细信息 + 显示重量明细信息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/上辅机/报表.报表设计.xml b/Main/MCEdit/Data/EventConfig/上辅机/报表.报表设计.xml new file mode 100644 index 0000000..9afc280 --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/上辅机/报表.报表设计.xml @@ -0,0 +1,33 @@ + + + + + + 设计器初始化 + 设计器初始化 + + + 通用报表显示 + 通用报表显示 + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/上辅机/报表.物料投放.xml b/Main/MCEdit/Data/EventConfig/上辅机/报表.物料投放.xml new file mode 100644 index 0000000..51674f6 --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/上辅机/报表.物料投放.xml @@ -0,0 +1,43 @@ + + + + + + 物料投放初始化 + 物料投放初始化 + + + 物料投放查询 + 物料投放查询 + + + 打印预览 + 打印预览 + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/上辅机/报表.车报表.xml b/Main/MCEdit/Data/EventConfig/上辅机/报表.车报表.xml new file mode 100644 index 0000000..c3aae5d --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/上辅机/报表.车报表.xml @@ -0,0 +1,149 @@ + + + + + + 窗体初始化 + 车报表查询条件初始化 + + + 查询 + 车报表查询 + + + 首条 + 首页 + + + 上一条 + 上一条 + + + 下一条 + 下一条 + + + 末条 + 末条 + + + 初始化曲线图 + 初始化曲线图 + + + 报表明细 + 报表明细 + + + 刷新配方列表 + 刷新配方列表(包括车报表和批报表) + + + 复位 + 复位 + + + 左移 + 左移 + + + 右移 + 右移 + + + 放大 + 放大 + + + 缩小 + 缩小 + + + 上移 + 上移 + + + 下移 + 下移 + + + + + + + + + + v + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/上辅机/数据回放.xml b/Main/MCEdit/Data/EventConfig/上辅机/数据回放.xml new file mode 100644 index 0000000..01a8947 --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/上辅机/数据回放.xml @@ -0,0 +1,59 @@ + + + + + + 播放 + 数据回访 + + + + + 暂停 + 数据回访 + + + + + 二倍速 + 数据回访 + + + + + 四倍速 + 数据回访 + + + + + 半倍速 + 数据回访 + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/上辅机/日志.报警日志.xml b/Main/MCEdit/Data/EventConfig/上辅机/日志.报警日志.xml new file mode 100644 index 0000000..a347cee --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/上辅机/日志.报警日志.xml @@ -0,0 +1,53 @@ + + + + + + 系统报警日志初始化 + 系统报警日志初始化 + + + 系统报警日志查询 + 系统报警日志查询 + + + 导出报警日志 + 导出报警日志到Excel中 + + + + + 控件报警事件 + 控件报警事件处理 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/上辅机/日志.系统日志.xml b/Main/MCEdit/Data/EventConfig/上辅机/日志.系统日志.xml new file mode 100644 index 0000000..6e3dcef --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/上辅机/日志.系统日志.xml @@ -0,0 +1,42 @@ + + + + + + 系统日志初始化 + 系统日志初始化 + + + 系统日志查询 + 系统日志查询 + + + 导出系统日志 + 导出系统日志到Excel + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/上辅机/生产管理.xml b/Main/MCEdit/Data/EventConfig/上辅机/生产管理.xml new file mode 100644 index 0000000..775e025 --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/上辅机/生产管理.xml @@ -0,0 +1,82 @@ + + + + + + 修改次数 + 修改生产计划数 + + + + + 配方重传 + 重新下配方 + + + + + 系统复位 + 系统复位 + + + + + 终止称量 + 终止称量 + + + + + 终止密炼 + 终止密炼 + + + + + 清除存盘标志 + 手动清除存盘标志 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/上辅机/生产计划.xml b/Main/MCEdit/Data/EventConfig/上辅机/生产计划.xml new file mode 100644 index 0000000..5328821 --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/上辅机/生产计划.xml @@ -0,0 +1,64 @@ + + + + + + 计划执行 + 执行生产计划 + + + + + 暂停计划 + 暂停生产计划 + + + + + 修改生产数量 + 修改生产数量 + + + + + 修改称重次数 + 修改称重次数 + + + + + 输入条码 + 手动输入条码 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/上辅机/生产计划.当班计划.xml b/Main/MCEdit/Data/EventConfig/上辅机/生产计划.当班计划.xml new file mode 100644 index 0000000..4777d0e --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/上辅机/生产计划.当班计划.xml @@ -0,0 +1,155 @@ + + + + + + 窗体初始化 + 绑定班次、绑定网络版生产计划 + + + 胶称画面计划列表初始化 + 初始化并刷新胶料称监控画面计划列表数据 + + + 刷新 + 刷新网络计划 + + + 选择接收 + 选择接收 网络计划 + + + 全部接收 + 全部接收 网络计划 + + + 修改 + 修改 本地计划 + + + 添加 + 添加 本地计划 + + + 删除 + 删除 本地计划 + + + 上移 + 上移 本地计划 + + + 下移 + 下移 本地计划 + + + 执行计划日期班次校验 + 执行计划日期班次校验 + + + 设置计划执行方式 + 设置计划执行方式 + + + 拆分计划(换班) + 换班时拆分计划 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/上辅机/系统初始化.xml b/Main/MCEdit/Data/EventConfig/上辅机/系统初始化.xml new file mode 100644 index 0000000..0178c42 --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/上辅机/系统初始化.xml @@ -0,0 +1,54 @@ + + + + + + 判断是否能连接网络库 + 判断是否能连接网络库,否则自动转化为单机版 + + + 系统数据初始化 + 初始化缓存的系统数据:配方、称量... + + + 存盘扫描 + 循环处理存盘业务 + + + + Socket接收处理 + 接收到Socket客户端消息后,进行相应业务处理 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/上辅机/系统工具.xml b/Main/MCEdit/Data/EventConfig/上辅机/系统工具.xml new file mode 100644 index 0000000..b60ff18 --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/上辅机/系统工具.xml @@ -0,0 +1,33 @@ + + + + + + 计算器 + 调用系统计算器 + + + 同步网络时间 + 同步网络服务器的系统时间 + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/上辅机/系统设置.xml b/Main/MCEdit/Data/EventConfig/上辅机/系统设置.xml new file mode 100644 index 0000000..2f0a891 --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/上辅机/系统设置.xml @@ -0,0 +1,54 @@ + + + + + + 设置为网络方式运行 + 设置为网络方式运行 + + + 设置为单机方式运行 + 设置为网络方式运行 + + + + + 窗体初始化 + 清除历史存盘数据界面初始化 + + + 清除历史存盘数据 + 执行清除历史存盘数据操作 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/上辅机/系统配置.权限管理.xml b/Main/MCEdit/Data/EventConfig/上辅机/系统配置.权限管理.xml new file mode 100644 index 0000000..aa391e1 --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/上辅机/系统配置.权限管理.xml @@ -0,0 +1,122 @@ + + + + + + 窗体初始化 + 绑定角色、绑定角色权限树 + + + 权限初始化 + 根据工程文件填充权限基本信息 + + + 权限刷新 + 根据所选角色刷新权限树信息 + + + 权限保存 + 保存角色具有的权限信息 + + + 保存为默认权限 + 保存为默认权限信息 + + + 勾选所有权限项 + 勾选树形控件的所有权限项 + + + 勾选默认权限项 + 勾选树形控件的默认权限项 + + + 取消勾选所有权限项 + 取消勾选树形控件的所有权限项 + + + + + 通用权限控制 + 根据权限处理界面控件 + + + 通用权限验证 + 系统登录与权限验证 + + + 重新登录 + 重新登录 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/上辅机/系统配置.通用配置.xml b/Main/MCEdit/Data/EventConfig/上辅机/系统配置.通用配置.xml new file mode 100644 index 0000000..d49503d --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/上辅机/系统配置.通用配置.xml @@ -0,0 +1,39 @@ + + + + + + 加载 + 初始化信息 + + + 保存 + 保存 + + + PLC类型 + PLC类型 + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/MCEdit/Data/EventConfig/小料称量/工程调试.xml b/Main/MCEdit/Data/EventConfig/小料称量/工程调试.xml new file mode 100644 index 0000000..457af53 --- /dev/null +++ b/Main/MCEdit/Data/EventConfig/小料称量/工程调试.xml @@ -0,0 +1,31 @@ + + + + + + 初始化界面 + 初始化界面 + + + 打开 + 打开 + + + + + + + + + + + + + + + + + + + + \ No newline at end of file