using Admin.Core.Common; using Admin.Core.IService; using Admin.Core.Model; using Admin.Core.Service; using Aucma.Core.PrintTo.Common; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using CommunityToolkit.Mvvm.Messaging; using FastReport; using log4net; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; /** * 补码打印 * */ namespace Aucma.Core.PrintTo.ViewModels { public partial class SupplementViewModel : ObservableObject { private readonly IPrintSuppleMentBarCodeServices _printSuppleMentBarCodeServices; private static readonly log4net.ILog log = LogManager.GetLogger(typeof(SupplementViewModel)); private PrintState printState { get; set; } = PrintState.Idle;//打印状态 PrintSuppleMentBarCode printSuppleMentBarCode = null; /// /// 构造函数 /// /// 补打表主键 public SupplementViewModel(int Id) { _printSuppleMentBarCodeServices = App.ServiceProvider.GetService(); printSuppleMentBarCode = _printSuppleMentBarCodeServices.FirstAsync(d => d.ObjId == Id).Result; if (printSuppleMentBarCode!=null) { _orderCode = printSuppleMentBarCode.OrderCode; ProductCode = printSuppleMentBarCode.MaterialCode; ProductName = printSuppleMentBarCode.MaterialName; _barCode = printSuppleMentBarCode.MaterialBarCode; PrintAmount = 1; PrintName = printSuppleMentBarCode.PrintName; } Progress = 0; MaxProgress = 1;//最大数 State = "Green"; ErrorNum = 0;//异常 SuspendEnabled = "False";//暂停打印 OperateEnabled = "True";//打印 } #region 打印 [RelayCommand] public async Task StartOperate() { try { string printer = Appsettings.app("Printer", "PrinterName"); #region 打印 Progress = 1; //对接打印机 Report barReport = new Report(); barReport.Load(System.Environment.CurrentDirectory + @"\Report\MaterialBar.frx");//打印报表位置 // 设置打印机和打印选项 barReport.PrintSettings.ShowDialog = false; // 是否打开打印机选择框 barReport.PrintSettings.Printer = printer; // 设置打印机名称 barReport.PrintSettings.Copies = 1; // 设置打印份数 //barReport.PrintSettings.PageRange = "1-3"; // 设置打印页范围 barReport.SetParameterValue("BoxBarData.Id", _barCode); barReport.SetParameterValue("BoxBarData.Order_No", _orderCode);//订单号 barReport.SetParameterValue("BoxBarData.Order_Material_Name", PrintName);//物料简码 barReport.SetParameterValue("BoxBarData.Bar_Code", _barCode);//二维码 PrintProgress = $"[1/1] {_barCode}"; barReport.Print(); #endregion //打印完成 不可以再次打印 printSuppleMentBarCode.IsPrint = "1"; printSuppleMentBarCode.PrintTime = DateTime.Now; await _printSuppleMentBarCodeServices.UpdateAsync(printSuppleMentBarCode); //打印完成 SetCompletetd(); } catch (Exception ex) { log.Error($"打印出错:{ex.Message}"); Console.WriteLine($"打印出错:{ex.Message}"); } } #endregion #region 选中订单参数 #region 订单编码 private string _orderCode; public string OrderCode { get => _orderCode; set => SetProperty(ref _orderCode, value); } #endregion #region 订单编码 private string _orderNo; public string OrderNo { get => _orderNo; set => SetProperty(ref _orderNo, value); } #endregion #region 打印名称 private string _printName; public string PrintName { get => _printName; set => SetProperty(ref _printName, value); } #endregion #region 产品编码 private string _productCode; public string ProductCode { get => _productCode; set => SetProperty(ref _productCode, value); } #endregion #region 产品名称 private string _productName; public string ProductName { get => _productName; set => SetProperty(ref _productName, value); } #endregion #region 物料编码 private string _barCode; public string BarCode { get => _barCode; set => SetProperty(ref _barCode, value); } #endregion #region 型号简码 private string _materialName; public string MaterialName { get => _materialName; set => SetProperty(ref _materialName, value); } #endregion #region 物料编码 private string _materialCode; public string MaterialCode { get => _materialCode; set => SetProperty(ref _materialCode, value); } #endregion #region 打印数量 private int _printAmount; public int PrintAmount { get => _printAmount; set => SetProperty(ref _printAmount, value); } #endregion #region 异常数量 private int _errorNum; public int ErrorNum { get => _errorNum; set => SetProperty(ref _errorNum, value); } #endregion #region 打印进度 private string _printProgress; public string PrintProgress { get => _printProgress; set => SetProperty(ref _printProgress, value); } #endregion #region 进度条最大值 private int _maxProgress; public int MaxProgress { get => _maxProgress; set => SetProperty(ref _maxProgress, value); } #endregion #region 进度条进度 private int _progress; public int Progress { get => _progress; set => SetProperty(ref _progress, value); } #endregion #region 打印状态 private string _state; public string State { get => _state; set => SetProperty(ref _state, value); } #endregion #region 开启、暂停状态按钮 名称 private string _stopOrStart; public string StopOrStart { get => _stopOrStart; set => SetProperty(ref _stopOrStart, value); } #endregion #region 操作打印按钮状态 private string _operateEnabled; public string OperateEnabled { get => _operateEnabled; set => SetProperty(ref _operateEnabled, value); } #endregion #region 操作暂停按钮状态 private string _suspendEnabled; public string SuspendEnabled { get => _suspendEnabled; set => SetProperty(ref _suspendEnabled, value); } #endregion #endregion #region 完成 /// /// 暂停 /// private void SetCompletetd() { printState = PrintState.Completetd; State = "Green"; StopOrStart = "已完成"; OperateEnabled = "True"; } #endregion #region 关闭当前界面 /// /// 关闭当前界面 /// /// [RelayCommand] public void CloseWindow(object parameter) { var window = parameter as Window; if (window == null) return; if (MessageBox.Show("确定要退出打印吗?", "系统提醒", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.Yes) { printState = PrintState.Stopped; WeakReferenceMessenger.Default.Send("RefreshSupplement");//刷新窗口 window.Close(); } } #endregion } }