using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json.Linq; using Sln.Wcs.Model.Domain; using Sln_Wpf.Page.AddWindows; using SqlSugar; namespace Sln_Wpf.Page { /// /// WarehouseInfo.xaml 的交互逻辑 /// public partial class WarehouseInfo : UserControl { private List _locations; private List _materials; private List _inoutRecords; private BaseLocation _selectedLocation; private BaseMaterialInfo _selectedMaterial; private BaseInoutRecord _selectedInoutRecord; private ISqlSugarClient? sqlSugarClient; public WarehouseInfo() { InitializeComponent(); sqlSugarClient = App.ServiceProvider.GetService(); sqlSugarClient.AsTenant().ChangeDatabase("wcs"); _locations = sqlSugarClient.Queryable().ToList(); _materials = sqlSugarClient.Queryable().ToList(); BindLocationData(); BindMaterialData(); } private void BindLocationData() { var displayData = _locations.Select(l => new { l.WorkshopId, l.WorkshopLevel, l.WarehouseId, l.MachineId, l.LocationCode, l.AgvPositionCode, l.ContainerCode, l.ActiveFlag, l.LocationStatus, StatusColor = l.LocationStatus == 1 ? Brushes.Red : (l.LocationStatus == 0 ? Brushes.Green : Brushes.Red) }).ToList(); LocationDataGrid.ItemsSource = displayData; } private void BindMaterialData() { var displayData = _materials.Select(m => new { m.MaterialCode, m.MaterialName, m.MaterialType, m.MaterialCategory, m.Status, }).ToList(); MaterialDataGrid.ItemsSource = displayData; } private void BindInoutData() { var displayData = _inoutRecords.Select(r => new { r.InoutFlag, InoutFlagColor = r.InoutFlag == 1 ? Brushes.Green : Brushes.Red, r.MaterialType, r.MaterialCode, r.WarehouseId, r.Createuser, CreateTime = r.CreateTime.ToString("yyyy-MM-dd HH:mm:ss") }).ToList(); InoutDataGrid.ItemsSource = displayData; } private void LoadFilters() { // 加载工坊筛选 var workshops = _locations.Select(l => l.WorkshopId).Distinct().ToList(); FilterWorkshop.Items.Clear(); FilterWorkshop.Items.Add("全部工坊"); foreach (var workshop in workshops) { FilterWorkshop.Items.Add(workshop); } } private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e) { } #region 库位管理事件 private void BtnLocationAdd_Click(object sender, RoutedEventArgs e) { var addWindow = new AddLocationWindow(); addWindow.Owner = Window.GetWindow(this); if (addWindow.ShowDialog() == true) { _locations.Add(addWindow.NewLocation); BindLocationData(); LoadFilters(); //UpdateStats(); MessageBox.Show($"库位 {addWindow.NewLocation.LocationCode} 添加成功!", "添加成功", MessageBoxButton.OK, MessageBoxImage.Information); } } private void BtnLocationEdit_Click(object sender, RoutedEventArgs e) { if (_selectedLocation == null) { MessageBox.Show("请先选择要编辑的库位", "提示", MessageBoxButton.OK, MessageBoxImage.Warning); return; } var editWindow = new AddLocationWindow(_selectedLocation); editWindow.Owner = Window.GetWindow(this); if (editWindow.ShowDialog() == true) { var updated = editWindow.NewLocation; _selectedLocation.WorkshopId = updated.WorkshopId; _selectedLocation.WorkshopLevel = updated.WorkshopLevel; _selectedLocation.WarehouseId = updated.WarehouseId; _selectedLocation.MachineId = updated.MachineId; _selectedLocation.LocationCode = updated.LocationCode; _selectedLocation.AgvPositionCode = updated.AgvPositionCode; _selectedLocation.ContainerCode = updated.ContainerCode; _selectedLocation.ActiveFlag = updated.ActiveFlag; _selectedLocation.LocationStatus = updated.LocationStatus; BindLocationData(); MessageBox.Show("库位信息更新成功", "提示", MessageBoxButton.OK, MessageBoxImage.Information); } } private void BtnLocationDelete_Click(object sender, RoutedEventArgs e) { if (_selectedLocation == null) { MessageBox.Show("请先选择要删除的库位", "提示", MessageBoxButton.OK, MessageBoxImage.Warning); return; } var result = MessageBox.Show($"确定要删除库位 {_selectedLocation.LocationCode} 吗?", "确认删除", MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) { _locations.Remove(_selectedLocation); var flag = sqlSugarClient.Deleteable().Where(d => d.LocationCode == _selectedLocation.LocationCode).ExecuteCommand(); BindLocationData(); LoadFilters(); //UpdateStats(); _selectedLocation = null; if (flag > 0) MessageBox.Show("删除成功", "提示", MessageBoxButton.OK, MessageBoxImage.Information); } } private void BtnLocationQuery_Click(object sender, RoutedEventArgs e) { string keyword = SearchLocationKeyword.Text; string filterWorkshop = FilterWorkshop.SelectedItem?.ToString(); string filterStatus = FilterStatus.SelectedItem?.ToString(); var queryData = _locations.AsEnumerable(); if (!string.IsNullOrEmpty(filterWorkshop) && filterWorkshop != "全部工坊") { queryData = queryData.Where(l => l.WorkshopId == GetSelectedTagValue(FilterWorkshop)); } if (!string.IsNullOrEmpty(filterStatus) && filterStatus != "全部状态") { queryData = queryData.Where(l => l.LocationStatus == GetSelectedTagValue(FilterStatus)); } if (!string.IsNullOrEmpty(keyword) && keyword != "请输入库位编号") { queryData = queryData.Where(l => l.LocationCode.Contains(keyword)); } var displayData = queryData.Select(l => new { l.WorkshopId, l.WorkshopLevel, l.WarehouseId, l.MachineId, l.LocationCode, l.AgvPositionCode, l.ContainerCode, l.ActiveFlag, l.LocationStatus, StatusColor = l.LocationStatus == 1 ? Brushes.Red : (l.LocationStatus == 0 ? Brushes.Green : Brushes.Red) }).ToList(); LocationDataGrid.ItemsSource = displayData; MessageBox.Show($"查询完成,共找到 {displayData.Count} 条记录", "查询结果", MessageBoxButton.OK, MessageBoxImage.Information); } private int GetSelectedTagValue(ComboBox comboBox) { var selectedItem = comboBox.SelectedItem as ComboBoxItem; if (selectedItem != null && selectedItem.Tag != null) { return Convert.ToInt32(selectedItem.Tag); } return 0; } private void LocationDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) { var selected = LocationDataGrid.SelectedItem; if (selected != null) { var locationCode = selected.GetType().GetProperty("LocationCode")?.GetValue(selected)?.ToString(); _selectedLocation = _locations.FirstOrDefault(l => l.LocationCode == locationCode); } } #endregion #region 物料信息事件 private void BtnMaterialAdd_Click(object sender, RoutedEventArgs e) { var addWindow = new AddMaterialWindow(); addWindow.Owner = Window.GetWindow(this); if (addWindow.ShowDialog() == true) { _materials.Add(addWindow.NewMaterial); BindMaterialData(); MessageBox.Show($"物料 {addWindow.NewMaterial.MaterialCode} 添加成功!", "添加成功", MessageBoxButton.OK, MessageBoxImage.Information); } } private void BtnMaterialEdit_Click(object sender, RoutedEventArgs e) { if (_selectedMaterial == null) { MessageBox.Show("请先选择要编辑的物料", "提示", MessageBoxButton.OK, MessageBoxImage.Warning); return; } var editWindow = new AddMaterialWindow(_selectedMaterial); editWindow.Owner = Window.GetWindow(this); if (editWindow.ShowDialog() == true) { var updated = editWindow.NewMaterial; _selectedMaterial.MaterialCode = updated.MaterialCode; _selectedMaterial.MaterialName = updated.MaterialName; _selectedMaterial.MaterialType = updated.MaterialType; _selectedMaterial.MaterialCategory = updated.MaterialCategory; _selectedMaterial.Status = updated.Status; BindMaterialData(); MessageBox.Show("物料信息更新成功", "提示", MessageBoxButton.OK, MessageBoxImage.Information); } } private void BtnMaterialDelete_Click(object sender, RoutedEventArgs e) { if (_selectedMaterial == null) { MessageBox.Show("请先选择要删除的物料", "提示", MessageBoxButton.OK, MessageBoxImage.Warning); return; } var result = MessageBox.Show($"确定要删除物料 {_selectedMaterial.MaterialCode} {_selectedMaterial.MaterialName} 吗?", "确认删除", MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) { _materials.Remove(_selectedMaterial); var flag = sqlSugarClient.Deleteable().Where(d => d.MaterialCode == _selectedMaterial.MaterialCode).ExecuteCommand(); BindMaterialData(); //UpdateStats(); _selectedMaterial = null; if(flag > 0) MessageBox.Show("删除成功", "提示", MessageBoxButton.OK, MessageBoxImage.Information); } } private void BtnMaterialQuery_Click(object sender, RoutedEventArgs e) { string keyword = SearchMaterialKeyword.Text; string filterType = (FilterMaterialType.SelectedItem as ComboBoxItem)?.Content.ToString(); string filterStatus = (FilterMaterialStatus.SelectedItem as ComboBoxItem)?.Content.ToString(); var queryData = _materials.AsEnumerable(); if (!string.IsNullOrEmpty(filterType) && filterType != "全部类型") { queryData = queryData.Where(m => m.MaterialType == filterType); } if (!string.IsNullOrEmpty(filterStatus) && filterStatus != "全部状态") { //queryData = queryData.Where(m => m.Status == filterStatus); } if (!string.IsNullOrEmpty(keyword) && keyword != "请输入物料编号/名称") { queryData = queryData.Where(m => m.MaterialCode.Contains(keyword) || m.MaterialName.Contains(keyword)); } var displayData = queryData.Select(m => new { m.MaterialCode, m.MaterialName, m.MaterialType, m.MaterialCategory, m.Status, }).ToList(); MaterialDataGrid.ItemsSource = displayData; MessageBox.Show($"查询完成,共找到 {displayData.Count} 条记录", "查询结果", MessageBoxButton.OK, MessageBoxImage.Information); } private void MaterialDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) { var selected = MaterialDataGrid.SelectedItem; if (selected != null) { var materialCode = selected.GetType().GetProperty("MaterialCode")?.GetValue(selected)?.ToString(); _selectedMaterial = _materials.FirstOrDefault(m => m.MaterialCode == materialCode); } } #endregion #region 出入库记录事件 private void BtnInoutAdd_Click(object sender, RoutedEventArgs e) { /*var addWindow = new AddInoutRecordWindow(_materials, _locations); addWindow.Owner = Window.GetWindow(this); if (addWindow.ShowDialog() == true) { _inoutRecords.Add(addWindow.NewRecord); BindInoutData(); UpdateStats(); MessageBox.Show($"出入库记录添加成功!", "添加成功", MessageBoxButton.OK, MessageBoxImage.Information); }*/ } private void BtnInoutDelete_Click(object sender, RoutedEventArgs e) { if (_selectedInoutRecord == null) { MessageBox.Show("请先选择要删除的记录", "提示", MessageBoxButton.OK, MessageBoxImage.Warning); return; } var result = MessageBox.Show($"确定要删除该出入库记录吗?", "确认删除", MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) { _inoutRecords.Remove(_selectedInoutRecord); BindInoutData(); _selectedInoutRecord = null; MessageBox.Show("删除成功", "提示", MessageBoxButton.OK, MessageBoxImage.Information); } } private void BtnInoutQuery_Click(object sender, RoutedEventArgs e) { string keyword = SearchInoutKeyword.Text; string filterFlag = FilterInoutFlag.SelectedItem?.ToString(); DateTime? startDate = FilterStartDate.SelectedDate; DateTime? endDate = FilterEndDate.SelectedDate; var queryData = _inoutRecords.AsEnumerable(); // 按出入库标志筛选 if (!string.IsNullOrEmpty(filterFlag) && filterFlag != "全部") { queryData = queryData.Where(r => r.InoutFlag == filterFlag switch { "入库" => 1, "出库" => 2, "" => 3, _ => throw new NotImplementedException() }); } // 按时间范围筛选 if (startDate.HasValue) { queryData = queryData.Where(r => r.CreateTime.Date >= startDate.Value.Date); } if (endDate.HasValue) { queryData = queryData.Where(r => r.CreateTime.Date <= endDate.Value.Date); } // 按关键字搜索(物料编号或人员) if (!string.IsNullOrEmpty(keyword) && keyword != "请输入物料编号/人员") { queryData = queryData.Where(r => r.MaterialCode.Contains(keyword) || r.Createuser.Contains(keyword)); } var displayData = queryData.Select(r => new { r.InoutFlag, InoutFlagColor = r.InoutFlag == 1 ? Brushes.Green : Brushes.Red, r.MaterialType, r.MaterialCode, r.WarehouseId, r.Createuser, CreateTime = r.CreateTime.ToString("yyyy-MM-dd HH:mm:ss") }).ToList(); InoutDataGrid.ItemsSource = displayData; MessageBox.Show($"查询完成,共找到 {displayData.Count} 条记录", "查询结果", MessageBoxButton.OK, MessageBoxImage.Information); } private void InoutDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) { var selected = InoutDataGrid.SelectedItem; if (selected != null) { using (var dynamicRow = selected as dynamic) { var createTime = dynamicRow?.CreateTime?.ToString(); var materialCode = dynamicRow?.MaterialCode?.ToString(); _selectedInoutRecord = _inoutRecords.FirstOrDefault(r => r.MaterialCode == materialCode && r.CreateTime.ToString("yyyy-MM-dd HH:mm:ss") == createTime); } } } #endregion } }