From ef5f8dbdb14fa21990c159f2e06ba7dd3e93d2c0 Mon Sep 17 00:00:00 2001 From: "liulb@mesnac.com" Date: Sun, 7 Jan 2024 16:02:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E9=92=A3=E9=87=91=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Admin.Core.Api/Admin.Core.Model.xml | 35 ++++ .../IRepository_New/ISysUserInfoRepository.cs | 12 ++ .../IService_New/ISysUserInfoServices.cs | 15 +- .../ViewModels/SheetMetaHourDataView.cs | 28 ++++ .../ViewModels/SheetMetalTypeDataView.cs | 33 ++++ .../Repository_New/SysUserInfoRepository.cs | 53 +++++- .../Service_New/SysUserInfoServices.cs | 18 +- .../ViewModels/IndexPageViewModel.cs | 155 +++++++++++------- .../ViewModels/QuantityIssuedViewModel.cs | 10 ++ .../ViewModels/SplitPlanViewModel.cs | 59 +++---- .../Views/MaterialStatisticsView.xaml | 5 +- .../Views/SplitPlanView.xaml | 4 +- Aucma.Core.SheetMetal/appsettings.json | 10 +- 13 files changed, 330 insertions(+), 107 deletions(-) create mode 100644 Admin.Core.Model/ViewModels/SheetMetaHourDataView.cs create mode 100644 Admin.Core.Model/ViewModels/SheetMetalTypeDataView.cs diff --git a/Admin.Core.Api/Admin.Core.Model.xml b/Admin.Core.Api/Admin.Core.Model.xml index e92cb60d..7f840075 100644 --- a/Admin.Core.Api/Admin.Core.Model.xml +++ b/Admin.Core.Api/Admin.Core.Model.xml @@ -5046,6 +5046,41 @@ 工位 + + + 小时 + + + + + 前板数量 + + + + + 后板数量 + + + + + 物料名称 + + + + + 工位 + + + + + 前板数量 + + + + + 后板数量 + + 产线编码 diff --git a/Admin.Core.IRepository/IRepository_New/ISysUserInfoRepository.cs b/Admin.Core.IRepository/IRepository_New/ISysUserInfoRepository.cs index 724c35a4..c0cbf020 100644 --- a/Admin.Core.IRepository/IRepository_New/ISysUserInfoRepository.cs +++ b/Admin.Core.IRepository/IRepository_New/ISysUserInfoRepository.cs @@ -28,5 +28,17 @@ namespace Admin.Core.IRepository /// Task> GetProductLineInfo(string productLineCode); + /// + /// 统计前后板型号数据 + /// + /// + /// + Task> GetSheetMetalTypeData(string productLineCode); + /// + /// 统计前后板小时数据 + /// + /// + /// + Task> GetSheetMetaHourData(string productLineCode); } } \ No newline at end of file diff --git a/Admin.Core.IService/IService_New/ISysUserInfoServices.cs b/Admin.Core.IService/IService_New/ISysUserInfoServices.cs index ed361950..13e7b320 100644 --- a/Admin.Core.IService/IService_New/ISysUserInfoServices.cs +++ b/Admin.Core.IService/IService_New/ISysUserInfoServices.cs @@ -36,6 +36,19 @@ namespace Admin.Core.IService /// /// Task GetProductLineInfo(string productLineCode); - + /// + /// 统计前后板数据 + /// + /// + /// + + Task> GetSheetMetalTypeData(string productLineCode); + /// + /// 统计前后板小时数据 + /// + /// + /// + + Task> GetSheetMetaHourData(string productLineCode); } } \ No newline at end of file diff --git a/Admin.Core.Model/ViewModels/SheetMetaHourDataView.cs b/Admin.Core.Model/ViewModels/SheetMetaHourDataView.cs new file mode 100644 index 00000000..815a8288 --- /dev/null +++ b/Admin.Core.Model/ViewModels/SheetMetaHourDataView.cs @@ -0,0 +1,28 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Admin.Core.Model.ViewModels +{ + public class SheetMetaHourDataView + { + /// + /// 小时 + /// + [SugarColumn(ColumnName = "HOUR_TIME")] + public string HourTime { get; set; } + /// + /// 前板数量 + /// + [SugarColumn(ColumnName = "FRONTPLATE_AMOUNT")] + public string FrontPlateAmount { get; set; } + /// + /// 后板数量 + /// + [SugarColumn(ColumnName = "REARPANEL_AMOUNT")] + public string RearPanelAmount { get; set; } + } +} diff --git a/Admin.Core.Model/ViewModels/SheetMetalTypeDataView.cs b/Admin.Core.Model/ViewModels/SheetMetalTypeDataView.cs new file mode 100644 index 00000000..7de52294 --- /dev/null +++ b/Admin.Core.Model/ViewModels/SheetMetalTypeDataView.cs @@ -0,0 +1,33 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Admin.Core.Model.ViewModels +{ + public class SheetMetalTypeDataView + { + /// + /// 物料名称 + /// + [SugarColumn(ColumnName = "MATERIAL_SPECIFICATIONS")] + public string MaterialName { get; set; } + /// + /// 工位 + /// + [SugarColumn(ColumnName = "PRODUCTLINE_CODE")] + public string ProductLineCode { get; set; } + /// + /// 前板数量 + /// + [SugarColumn(ColumnName = "FRONTPLATE_AMOUNT")] + public string FrontPlateAmount { get; set; } + /// + /// 后板数量 + /// + [SugarColumn(ColumnName = "REARPANEL_AMOUNT")] + public string RearPanelAmount { get; set; } + } +} diff --git a/Admin.Core.Repository/Repository_New/SysUserInfoRepository.cs b/Admin.Core.Repository/Repository_New/SysUserInfoRepository.cs index e95aaf86..6a19c873 100644 --- a/Admin.Core.Repository/Repository_New/SysUserInfoRepository.cs +++ b/Admin.Core.Repository/Repository_New/SysUserInfoRepository.cs @@ -57,6 +57,57 @@ namespace Admin.Core.Repository #endregion - + #region 获取钣金型号统计数据 + /// + /// 获取班组数据 + /// + /// + /// + public async Task> GetSheetMetalTypeData(string productLineCode) + { + string sql = @$"WITH CTT AS (SELECT MIN(START_TIME) START_TIME, MAX(END_TIME) END_TIME + FROM VIEW_CURRENT_TEAM_TIME) + SELECT ML.MATERIAL_SPECIFICATIONS,SPC.PRODUCTLINE_CODE, + SUM(CASE + WHEN SPC.PLAN_TYPE = 1 THEN SPC.COMPLETE_AMOUNT + WHEN SPC.PLAN_TYPE = 2 THEN SPC.COMPLETE_AMOUNT + ELSE 0 END) FRONTPLATE_AMOUNT, + SUM(CASE + WHEN SPC.PLAN_TYPE = 1 THEN SPC.COMPLETE_AMOUNT + WHEN SPC.PLAN_TYPE = 3 THEN SPC.COMPLETE_AMOUNT + ELSE 0 END) REARPANEL_AMOUNT + FROM VIEW_EXECUTE_PLANINFO SPC + LEFT JOIN BASE_MATERIALINFO ML ON ML.MATERIAL_CODE = SPC.MATERIAL_CODE + CROSS JOIN CTT + WHERE SPC.BEGIN_TIME > CTT.START_TIME + AND SPC.BEGIN_TIME <= CTT.END_TIME and SPC.PRODUCTLINE_CODE='{productLineCode}' + GROUP BY ML.MATERIAL_SPECIFICATIONS,SPC.PRODUCTLINE_CODE"; + + return await Db.Ado.SqlQueryAsync(sql); + } + + #endregion + public async Task> GetSheetMetaHourData(string productLineCode) + { + string sql = @$"SELECT CTT.HOUR_TIME, + SUM(CASE + WHEN SPC.PLAN_TYPE = 1 THEN SPC.COMPLETE_AMOUNT + WHEN SPC.PLAN_TYPE = 2 THEN SPC.COMPLETE_AMOUNT + ELSE 0 END) FRONTPLATE_AMOUNT, + SUM(CASE + WHEN SPC.PLAN_TYPE = 1 THEN SPC.COMPLETE_AMOUNT + WHEN SPC.PLAN_TYPE = 3 THEN SPC.COMPLETE_AMOUNT + ELSE 0 END) REARPANEL_AMOUNT + FROM VIEW_CURRENT_TEAM_TIME CTT + LEFT JOIN (select * from VIEW_EXECUTE_PLANINFO where PRODUCTLINE_CODE='{productLineCode}') SPC + ON SPC.BEGIN_TIME >= CTT.START_TIME AND SPC.BEGIN_TIME < CTT.END_TIME + + GROUP BY CTT.HOUR_TIME + ORDER BY CTT.HOUR_TIME"; + + return await Db.Ado.SqlQueryAsync(sql); + } + + } } \ No newline at end of file diff --git a/Admin.Core.Service/Service_New/SysUserInfoServices.cs b/Admin.Core.Service/Service_New/SysUserInfoServices.cs index 47ca4939..acd2cce9 100644 --- a/Admin.Core.Service/Service_New/SysUserInfoServices.cs +++ b/Admin.Core.Service/Service_New/SysUserInfoServices.cs @@ -67,7 +67,21 @@ namespace Admin.Core.IService var obj = list.SingleOrDefault(d => d.ProductlineCode == productLineCode); return obj; } - - + + /// + /// 统计前后板数据 + /// + /// + /// + + public async Task> GetSheetMetalTypeData(string productLineCode) + { + return await _sysUserInfoRepository.GetSheetMetalTypeData(productLineCode); + } + + public async Task> GetSheetMetaHourData(string productLineCode) + { + return await _sysUserInfoRepository.GetSheetMetaHourData(productLineCode); + } } } \ No newline at end of file diff --git a/Aucma.Core.SheetMetal/ViewModels/IndexPageViewModel.cs b/Aucma.Core.SheetMetal/ViewModels/IndexPageViewModel.cs index 05dd5ba9..6b96e981 100644 --- a/Aucma.Core.SheetMetal/ViewModels/IndexPageViewModel.cs +++ b/Aucma.Core.SheetMetal/ViewModels/IndexPageViewModel.cs @@ -62,7 +62,8 @@ namespace Aucma.Core.SheetMetal.ViewModels //WeakReferenceMessenger.Default.Register(this, Recive); Task.WaitAll(LoadData()); AddSelectData();//添加下拉菜单 - RefreshHourAmount();//小时产量 + RefreshHourAmount();//小时产量 + // InitEveryDayMethod(); RefreshMaterialStats();//型号产量 SheetMetalPlanTaskHandle.RefreshCurrentPlanInfoEvent += RefreshCurrentPlanInfo; QuantityIssuedViewModel.RefreshCretaePlanInfoEvent += LoadData; @@ -155,34 +156,34 @@ namespace Aucma.Core.SheetMetal.ViewModels #endregion #region 按类型统计 - ChartValues achievement2 = new ChartValues(); - Random random2 = new Random(); - for (int i = 0; i < 2; i++) - { - achievement2.Add(random2.Next(60, 100)); - } - var column2 = new ColumnSeries(); - column2.DataLabels = true; - column2.Title = "前板"; - column2.Values = achievement2; - column2.Foreground = Brushes.White; - column2.FontSize = 18; - ModelStatistics.Add(column2); - - ModelStatistics.Add(new ColumnSeries() - { - DataLabels = true, - Title = "后板", - Values = achievement2, - Fill = new SolidColorBrush(Color.FromRgb(15, 209, 226)), - Foreground = Brushes.White, - FontSize = 18 - }); - - MaterialNameList = new List() - { - "玻璃门,SC-439", "玻璃门,SC-439,AC" - }; + //ChartValues achievement2 = new ChartValues(); + //Random random2 = new Random(); + //for (int i = 0; i < 2; i++) + //{ + // achievement2.Add(random2.Next(60, 100)); + //} + //var column2 = new ColumnSeries(); + //column2.DataLabels = true; + //column2.Title = "前板"; + //column2.Values = achievement2; + //column2.Foreground = Brushes.White; + //column2.FontSize = 18; + //ModelStatistics.Add(column2); + + //ModelStatistics.Add(new ColumnSeries() + //{ + // DataLabels = true, + // Title = "后板", + // Values = achievement2, + // Fill = new SolidColorBrush(Color.FromRgb(15, 209, 226)), + // Foreground = Brushes.White, + // FontSize = 18 + //}); + + //MaterialNameList = new List() + //{ + // "玻璃门,SC-439", "玻璃门,SC-439,AC" + //}; #endregion //await InitExecMethod(); return Task.CompletedTask; @@ -199,7 +200,7 @@ namespace Aucma.Core.SheetMetal.ViewModels string stationCode = Appsettings.app("StationInfo", "StationCode"); CurrentTeamTimeView view = GetTeamHour(); - var list = _taskExecutionPlanInfoServices.QueryAsync(x => x.ProductLineCode == stationCode&& x.CreatedTime> view.StartTime && x.CreatedTime x.ProductLineCode == stationCode&& x.CreatedTime> view.StartTime && x.CreatedTime d.ExecuteOrder); @@ -675,26 +676,48 @@ namespace Aucma.Core.SheetMetal.ViewModels { //获取小时产量 string stationCode = Appsettings.app("StationInfo", "StationCode"); - List hourAmount = _taskExecutionPlanInfoServices.GetStationSheetMetalHourAmountAsync(stationCode).Result; + var hourAmount = _sysUserInfoServices.GetSheetMetaHourData(stationCode).Result; if (hourAmount != null) { Achievement.Clear(); + ProductionHourList = new List(); - //ChartValues hourAchievement = new ChartValues(); - ChartValues hourAchievement = new ChartValues(); + ChartValues hourAchievement1 = new ChartValues(); + ChartValues hourAchievement2 = new ChartValues(); + int hour = 0; foreach (var item in hourAmount) { - ObservablePoint point = new ObservablePoint(Convert.ToInt32(item.SIDPANELHOURAMOUNT), Convert.ToInt32(item.BACKPANELHOURAMOUNT)); - ProductionHourList.Add(item.PRODUCT_HOUR); - hourAchievement.Add(point); - //hourAchievement.Add(Convert.ToDouble(item.PRODUCT_AMOUNT)); + hourAchievement1.Add(new ObservablePoint(hour,Convert.ToDouble(item.FrontPlateAmount))); + hourAchievement2.Add(new ObservablePoint(hour,Convert.ToDouble(item.RearPanelAmount))); + ProductionHourList.Add(item.HourTime); + hour++; } - var houeColumn = new ColumnSeries(); - houeColumn.DataLabels = true; - houeColumn.Title = "小时产量"; - houeColumn.Values = hourAchievement; - houeColumn.Foreground = Brushes.White; - Achievement.Add(houeColumn); + + + + #region 按时间统计 + + + var column = new ColumnSeries(); + column.DataLabels = true; + column.Title = "前板"; + column.Values = hourAchievement1; + column.Foreground = Brushes.White; + column.FontSize = 18; + + Achievement.Add(column); + + Achievement.Add(new ColumnSeries + { + DataLabels = true, + Title = "后板", + Values = hourAchievement2, + Fill = new SolidColorBrush(Color.FromRgb(15, 209, 226)), + Foreground = Brushes.CadetBlue, + FontSize = 18 + }); + + #endregion } })); } @@ -708,29 +731,41 @@ namespace Aucma.Core.SheetMetal.ViewModels { App.Current.Dispatcher.Invoke((Action)(() => { - //获取物料型号统计 string stationCode = Appsettings.app("StationInfo", "StationCode"); - List materialStats = _taskExecutionPlanInfoServices.GetStationSheetMetalStats(stationCode); - - - - if (materialStats != null) + var sheetMetalTypeList = _sysUserInfoServices.GetSheetMetalTypeData(stationCode).Result; + if (sheetMetalTypeList != null) { - ModelStatistics.Clear(); + #region 按类型统计 + ChartValues achievement1 = new ChartValues(); + ChartValues achievement2 = new ChartValues(); + MaterialNameList = new List(); - ChartValues materialAchievement = new ChartValues(); - foreach (var item in materialStats) + foreach (var item in sheetMetalTypeList) { - MaterialNameList.Add(item.MATERIAL_NAME); - materialAchievement.Add(Convert.ToDouble(item.PRODUCT_AMOUNT)); + achievement1.Add(Convert.ToInt32(item.FrontPlateAmount)); + achievement2.Add(Convert.ToInt32(item.RearPanelAmount)); + MaterialNameList.Add(item.MaterialName); } - var materialColumn = new ColumnSeries(); - materialColumn.DataLabels = true; - materialColumn.Title = "型号"; - materialColumn.Values = materialAchievement; - materialColumn.Foreground = Brushes.White; - ModelStatistics.Add(materialColumn); + var column2 = new ColumnSeries(); + column2.DataLabels = true; + column2.Title = "前板"; + column2.Values = achievement1; + column2.Foreground = Brushes.White; + column2.FontSize = 18; + ModelStatistics.Add(column2); + + ModelStatistics.Add(new ColumnSeries() + { + DataLabels = true, + Title = "后板", + Values = achievement2, + Fill = new SolidColorBrush(Color.FromRgb(15, 209, 226)), + Foreground = Brushes.White, + FontSize = 18 + }); + + #endregion } })); } diff --git a/Aucma.Core.SheetMetal/ViewModels/QuantityIssuedViewModel.cs b/Aucma.Core.SheetMetal/ViewModels/QuantityIssuedViewModel.cs index dcb6c024..9d9bfad8 100644 --- a/Aucma.Core.SheetMetal/ViewModels/QuantityIssuedViewModel.cs +++ b/Aucma.Core.SheetMetal/ViewModels/QuantityIssuedViewModel.cs @@ -69,6 +69,16 @@ namespace Aucma.Core.SheetMetal.ViewModels [RelayCommand] private async Task PlanInfoTransmit() { + if (string.IsNullOrEmpty(TransmitAmount)) + { + MessageBox.Show("计划数量不能为空!", "系统提醒"); + return; + } + if (PlanInfo.PlanAmount<=Convert.ToInt32(TransmitAmount)) + { + MessageBox.Show("下发数量不能大于计划数量!", "系统提醒"); + return; + } var productPlanInfo = _PlanInfo; if (productPlanInfo != null) { diff --git a/Aucma.Core.SheetMetal/ViewModels/SplitPlanViewModel.cs b/Aucma.Core.SheetMetal/ViewModels/SplitPlanViewModel.cs index 194f73a5..5af2ab65 100644 --- a/Aucma.Core.SheetMetal/ViewModels/SplitPlanViewModel.cs +++ b/Aucma.Core.SheetMetal/ViewModels/SplitPlanViewModel.cs @@ -356,43 +356,32 @@ namespace Aucma.Core.SheetMetal.ViewModels [RelayCommand] public async Task RadioButton(string selectedOption) { - string productLineCode = Appsettings.app("StoreInfo", "ProductLineCode"); - List planInfos = await _productPlanInfoServices.QueryAsync(d => d.ProductLineCode.Equals(productLineCode) && d.MaterialName.Contains(selectedOption)); - if (planInfos != null) + string productLineCode = Appsettings.app("StationInfo", "StationCode"); + MaterialDataGrid.Clear(); + int i = 1; + string station = Appsettings.app("StationInfo", "StationCode"); + var planlist = _productPlanInfoServices.QueryAsync(d => d.ProductLineCode.Equals(station)&&d.MaterialName.Contains(selectedOption)).Result; + if (planlist == null) return; + var execList = await _executePlanInfoServices.QueryAsync(d => d.ProductLineCode.Equals(station)&& d.MaterialName.Contains(station)); + if (execList == null) return; + foreach (var item in planlist) { - if (planInfos.Count > 0) + int residue = 0; + if (execList == null) residue = 0; + else residue = (execList.Where(d => d.MaterialCode.Equals(item.MaterialCode))).Sum(d => d.PlanAmount); + MaterialDataGrid.Add(new ProductPlanInfoModel() { - MaterialDataGrid.Clear(); - int i = 1; - - var execList = await _executePlanInfoServices.QueryAsync(d => d.ProductLineCode.Equals(productLineCode)); - foreach (var item in planInfos) - { - int residue = 0; - if (execList == null) - { - residue = 0; - } - else - { - residue = (execList.Where(d => d.MaterialCode.Equals(item.MaterialCode))).Sum(d => d.PlanAmount); - } - - MaterialDataGrid.Add(new ProductPlanInfoModel() - { - No = i, - PlanCode = item.PlanCode, - MaterialCode = item.MaterialCode, - MaterialName = item.MaterialName, - OrderCode = item.OrderCode, - PlanAmount = item.PlanAmount, - ResidueAmount = item.PlanAmount - item.CompleteAmount, - SpliteResidueAmount = item.PlanAmount - residue, - StartDate = item.BeginTime - }); - i++; - } - } + No = i, + PlanCode = item.PlanCode, + MaterialCode = item.MaterialCode, + MaterialName = item.MaterialName, + OrderCode = item.OrderCode, + PlanAmount = item.PlanAmount, + ResidueAmount = item.PlanAmount - item.CompleteAmount, + SpliteResidueAmount = item.PlanAmount - residue, + StartDate = item.BeginTime + }); + i++; } } diff --git a/Aucma.Core.SheetMetal/Views/MaterialStatisticsView.xaml b/Aucma.Core.SheetMetal/Views/MaterialStatisticsView.xaml index 0f2338c8..1c095f78 100644 --- a/Aucma.Core.SheetMetal/Views/MaterialStatisticsView.xaml +++ b/Aucma.Core.SheetMetal/Views/MaterialStatisticsView.xaml @@ -182,9 +182,12 @@ - + + + + diff --git a/Aucma.Core.SheetMetal/Views/SplitPlanView.xaml b/Aucma.Core.SheetMetal/Views/SplitPlanView.xaml index 9a1b05d2..c7d005db 100644 --- a/Aucma.Core.SheetMetal/Views/SplitPlanView.xaml +++ b/Aucma.Core.SheetMetal/Views/SplitPlanView.xaml @@ -232,10 +232,10 @@ Foreground="White" SelectedItem="{Binding SelectedDataItem}" MouseLeftButtonDown="dgvMH_MouseLeftButtonDown"> - + - + diff --git a/Aucma.Core.SheetMetal/appsettings.json b/Aucma.Core.SheetMetal/appsettings.json index f3054b0d..369a633d 100644 --- a/Aucma.Core.SheetMetal/appsettings.json +++ b/Aucma.Core.SheetMetal/appsettings.json @@ -115,11 +115,11 @@ }, "StationInfo": { "StationName": "箱壳前后板生产", - "StationCode": "1001", - "ShellStoreCode": "XKJCK-001", - "LinerStoreCode": "NDJCK-001", - "FoamBeforeStoreCode": "PBSCK-001", - "ProductLineCode": "CX_01" + "StationCode": "1001", //工位 + "ShellStoreCode": "XKK-001", + "LinerStoreCode": "NDK-001", + "FoamBeforeStoreCode": "PQK-001", + "ProductLineCode": "CX_02" }, "PLCServer": [ {