using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using SlnMesnac.Model.domain; using SlnMesnac.Model.dto.taskType; using SlnMesnac.WPF.Library; using SqlSugar; 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.Shapes; using TouchSocket.Core; using static MaterialDesignThemes.Wpf.Theme.ToolBar; namespace SlnMesnac.WPF.Page { /// /// CreateMoveWindow.xaml 的交互逻辑 /// public partial class CreateMoveWindow : Window { private ISqlSugarClient? SqlSugarClient; public CreateMoveWindow() { InitializeComponent(); SqlSugarClient = App.ServiceProvider.GetService(); LoadLocations(); // 初始化 ComboBox 选项 } // 加载地点选项(3001-3024) private void LoadLocations() { for (int i = 301; i <= 312; i++) { this.StartComboBox.Items.Add(i.ToString()+"A"); this.StartComboBox.Items.Add(i.ToString() + "B"); EndComboBox.Items.Add(i.ToString()+"A"); EndComboBox.Items.Add(i.ToString() + "B"); } StartComboBox.Items.Add("异常库位3066"); EndComboBox.Items.Add("异常库位3066"); } // 确认按钮点击事件 private void ConfirmButton_Click(object sender, RoutedEventArgs e) { string startCode = StartComboBox.SelectedItem?.ToString(); string endCode = EndComboBox.SelectedItem?.ToString(); if(SqlSugarClient == null) { MessageBox.Show("SqlSugarClient为空!"); return; } if (string.IsNullOrEmpty(startCode) || string.IsNullOrEmpty(endCode)) { MessageBox.Show("请选择起点和终点!"); return; } if (startCode == endCode) { MessageBox.Show("起点和终点不能相同!"); return; } if (startCode == "异常库位3066") { startCode = "3066"; } if (endCode == "异常库位3066") { endCode = "3066"; } WmsBaseLocation? startLocation = SqlSugarClient.Queryable().Where(it => it.LocationCode == startCode).First(); WmsBaseLocation? endLocation = SqlSugarClient.Queryable().Where(it => it.LocationCode == endCode).First(); WmsPalletInfo? wmsPalletInfo = SqlSugarClient.Queryable().InnerJoin((x,y) => x.Amount == 0 && y.LocationCode == startCode).First(); if (wmsPalletInfo == null) { MessageBox.Show("起点库位托盘未清空,无法移库!"); return; } if (startLocation.LocationStatus != 0) { MessageBox.Show("起点库位不可用,状态被锁定!"); return; } if (endLocation.LocationStatus != 0) { MessageBox.Show("终点库位不可用,状态被锁定!"); return; } if (string.IsNullOrEmpty(startLocation.ContainerCode)) { MessageBox.Show("起点库位无托盘,请检查库存!"); return; } if (!string.IsNullOrEmpty(endLocation.ContainerCode)) { MessageBox.Show($"终点库位已有托盘:{endLocation.ContainerCode},禁止移库,请检查库存!"); return; } try { WcsTask task = new WcsTask(); task.TaskType = StaticTaskType.MoveLocationTask; task.CurrPointNo = startLocation.AgvPositionCode; task.EndPointNo = endLocation.AgvPositionCode; task.TaskStatus = 0; task.CreatedTime = DateTime.Now; task.CreatedBy = "wcs"; task.TaskName = "1-12机台移库任务"; task.PalletInfoCode = startLocation.ContainerCode; SqlSugarClient.AsTenant().BeginTran(); int id = SqlSugarClient.Insertable(task).ExecuteReturnIdentity(); WcsTaskLog wcsTaskLog = CoreMapper.Map(task); wcsTaskLog.Id = id; //锁定库位 startLocation.LocationStatus = 1; endLocation.LocationStatus = 1; SqlSugarClient.Updateable(startLocation).ExecuteCommand(); SqlSugarClient.Updateable(endLocation).ExecuteCommand(); SqlSugarClient.Insertable(wcsTaskLog).ExecuteCommand(); SqlSugarClient.AsTenant().CommitTran(); MessageBox.Show($"生成{task.TaskName},起点:{task.CurrPointNo},终点:{task.EndPointNo}"); } catch (Exception ex) { MessageBox.Show($"生成移库任务提交事务异常:{ex.Message}"); SqlSugarClient.AsTenant().RollbackTran(); } this.Close(); } } }