using BBWY.Client.APIServices.QiKu; using BBWY.Client.Extensions; using BBWY.Client.Models; using BBWY.Client.Views.SplitTask; using BBWY.Controls; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Drawing.Printing; using System.IO; using System.Printing; using System.Reflection; using System.Text; 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 WebSocketSharp; namespace BBWY.Client.Views.SomeArrival { /// /// PrintSomeArrivalWindow.xaml 的交互逻辑 /// public partial class PrintSomeArrivalWindow : BWindow { public PrintSomeArrivalWindow(PackTaskAbortService packTaskAbortService, PackTaskModel model, Action reFlashWindow, List shelvesNumberList, List floorNumberList) { InitializeComponent(); InitPrintList(); this.DataContext = this; this.model = model; this.packTaskAbortService = packTaskAbortService; if (!model.ShelvesNumber.IsNullOrEmpty()) ShelvesNumber = model.ShelvesNumber; if (model.FloorNumber != null) FloorNumber = model.FloorNumber; if (model.AbortRemark != null) RemarkMsg = model.AbortRemark; FloorNumberList = floorNumberList; ShelvesNumberList = shelvesNumberList; ReFlashWindow = reFlashWindow; } private string remarkMsg; /// /// 货架 /// public string RemarkMsg { get => remarkMsg; set { Set(ref remarkMsg, value); } } Action ReFlashWindow; PackTaskAbortService packTaskAbortService; private List floorNumberList = new List { 1, 2, 3, 4 }; /// /// 层数列表 /// public List FloorNumberList { get => floorNumberList; set { Set(ref floorNumberList, value); } } private int? floorNumber; /// ///层数 /// public int? FloorNumber { get => floorNumber; set { Set(ref floorNumber, value); } } private List shelvesNumberList; /// /// 货架列表 /// public List ShelvesNumberList { get => shelvesNumberList; set { Set(ref shelvesNumberList, value); } } private string shelvesNumber; /// /// 货架 /// public string ShelvesNumber { get => shelvesNumber; set { Set(ref shelvesNumber, value); } } private PackTaskModel model; /// /// 打印机列表 /// public ObservableCollection PrintList { get; set; } public string PrintName { get; set; } public int PrintCount { get => printCount; set { Set(ref printCount, value); } } private int printCount = 1; public void InitPrintList() { PrintList = new ObservableCollection(); var printingNames = PrinterSettings.InstalledPrinters;//获取本机的打印机数据 int index = -1; int selectIndex = 0; foreach (string name in printingNames) { if (name == "Microsoft XPS Document Writer" || name == "Microsoft Print to PDF" || name == "Fax") { continue; } index++; if (name.Contains("Deli")) { selectIndex = index; } PrintList.Add(name); } try { var applicationPath = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string printNames = System.IO.Path.Combine(applicationPath, "printName.init"); if (File.Exists(printNames)) { PrintName = File.ReadAllText(printNames); } else { if (PrintList.Count > 0) { PrintName = PrintList[0].ToString(); } } } catch (Exception) { } } public void PrintBox() { } private void BButton_Click(object sender, System.Windows.RoutedEventArgs e) { if (PrintName.IsNullOrEmpty()) { MessageBox.Show("请选择打印设备"); return; } if (string.IsNullOrEmpty(PrintName)) { return; } var localPrintServer = new LocalPrintServer(); var printQueue = localPrintServer.GetPrintQueue(PrintName); if (printQueue.IsInError) { System.Windows.MessageBox.Show("打印机处于错误状态"); return; } if (ShelvesNumber.IsNullOrEmpty() || FloorNumber==null ) { MessageBox.Show("请输入摆放货架位置"); return; } var res = packTaskAbortService.SaveTaskShelves(model.TaskId, ShelvesNumber, FloorNumber,remarkMsg); if (res==null||!res.Success) { MessageBox.Show(res.Msg ?? "未知错误!"); return; } model.ShelvesNumber = ShelvesNumber; model.FloorNumber = FloorNumber; model.AbortRemark = RemarkMsg; SomeArrivalWindow window = new SomeArrivalWindow(model); //window.ShowDialog(); for (int i = 0; i < PrintCount; i++) { window.Print(PrintName); } this.Close(); ReFlashWindow?.Invoke(); try { var applicationPath = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string printNames = System.IO.Path.Combine(applicationPath, "printName.init"); try { if (File.Exists(printNames)) { File.Delete(printNames); } } catch { } File.WriteAllText(printNames, PrintName); } catch (Exception) { } } } }