using HandyControl.Controls; using HandyControl.Data; using MiniExcelLibs; using Ping9719.WpfEx.Mvvm; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data.SqlClient; using System.IO; using System.Linq; using System.Net; using System.Security.Cryptography.X509Certificates; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using System.Web.UI.WebControls; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using TouchSocket.Core; using WCS.Model; using WCS.Model.ApiModel.OutStore; using WCS.Model.ApiModel.Stocktaking; using 智能仓储WCS管理系统.Api; using 智能仓储WCS管理系统.ViewModel; namespace 智能仓储WCS管理系统.ViewModel { public class MXOutInventoryViewModel : BindableBase { public MXOutInventoryViewModel() { RefreshOutOrderList(); } public static object flag { get; set; } = new object(); #region Property private OutOrderModel selectedOutOrder; public OutOrderModel SelectedOutOrder { get { return selectedOutOrder; } set { SetProperty(ref selectedOutOrder, value); if (selectedOutOrder != null && selectedOutOrder.OrderNumber != SelectedOutOrderNumber) { SelectedOutOrderNumber = selectedOutOrder.OrderNumber; RefreshDataGridItemSource(); } else if (selectedOutOrder != null && selectedOutOrder.OrderNumber == SelectedOutOrderNumber) { RefreshDataGridItemSource(); } else { } } } private string selectedOutOrderNumber; public string SelectedOutOrderNumber { get => selectedOutOrderNumber; set { SetProperty(ref selectedOutOrderNumber, value); } } private ObservableCollection outOrderList; public ObservableCollection OutOrderList { get => outOrderList; set { SetProperty(ref outOrderList, value); } } private ObservableCollection dataGridItemSource; public ObservableCollection DataGridItemSource { get { return dataGridItemSource; } set { SetProperty(ref dataGridItemSource, value); RefreshCount(); } } //单据总盘数 private int totalPan; public int TotalPan { get => totalPan; set { SetProperty(ref totalPan, value); } } private int sendedPan; public int SendedPan { get => sendedPan; set { SetProperty(ref sendedPan, value); } } private string orderStatus; public string OrderStatus { get { return orderStatus; } set { SetProperty(ref orderStatus, value); } } public void RefreshCount() { Task.Run(() => { try { SendedPan = dataGridItemSource.Where(t => t.IsSended).Count(); TotalPan = dataGridItemSource.Count(); } catch (Exception ex) { Thread.Sleep(500); SendedPan = dataGridItemSource.Where(t => t.IsSended).Count(); TotalPan = dataGridItemSource.Count(); } }); } #endregion #region Command public ICommand BtnOutOrderCommand { get => new DelegateCommand(BtnOutOrder); } public void BtnOutOrder() { var window = new MXOutOrderView(); window.Owner = Application.Current.MainWindow; window.Topmost = true; window.ShowDialog(); } public ICommand BtnStartCommand { get => new DelegateCommand(BtnStart); } public void BtnStart() { try { //判断是否选择单据 if (SelectedOutOrder == null) { Growl.Warning("未选择单据!请选择左侧单据!"); return; } #region 调用接口开始出库 var body = new GetOutOrderDetailRequest() { OrderId = SelectedOutOrder.Id, OrderNumber = SelectedOutOrder.OrderNumber, UserName = LocalStatic.CurrentUser, DeviceType = LocalFile.Config.DeviceType, }; var Result = ApiHelp.GetDataFromHttp(LocalFile.Config.ApiIpHost + "outStore/goInOutstore", body, "POST"); if (Result != null && Result.Code == 200) { Growl.Warning("已成功开始发料!"); RefreshOutOrderList(SelectedOutOrderNumber); } else if (Result != null) { Growl.Warning(Result.Message); } else { Growl.Warning("调用接口失败!"); } #endregion } catch (Exception ex) { Growl.Error("出现异常:" + ex.Message); } finally { } } public ICommand BtnPauseCommand { get => new DelegateCommand(BtnPause); } public void BtnPause() { try { //判断是否选择单据 if (SelectedOutOrder == null) { Growl.Warning("未选择单据!请选择左侧单据!"); return; } #region 调用接口结束出库 var body = new GetOutOrderDetailRequest() { OrderId = SelectedOutOrder.Id, OrderNumber = SelectedOutOrder.OrderNumber, UserName = LocalStatic.CurrentUser, DeviceType = LocalFile.Config.DeviceType, }; var Result = ApiHelp.GetDataFromHttp(LocalFile.Config.ApiIpHost + "outStore/goOutOutstore", body, "POST"); if (Result != null && Result.Code == 200) { Growl.Warning("已成功取消发料!"); RefreshOutOrderList(SelectedOutOrderNumber); } else if (Result != null) { Growl.Warning(Result.Message); } else { Growl.Warning("调用接口失败!"); } #endregion } catch (Exception ex) { Growl.Error("出现异常:" + ex.Message); } finally { } } public void RefreshOutOrderList(string OrderNumber = "") { lock (flag) { Logs.Write($"【RefreshOutOrderList1】OrderNumber{OrderNumber}", LogsType.Info); if (string.IsNullOrEmpty(OrderNumber) && !string.IsNullOrEmpty(SelectedOutOrderNumber)) { OrderNumber = SelectedOutOrderNumber; Logs.Write($"【RefreshOutOrderList2】OrderNumber{OrderNumber}", LogsType.Info); } #region 调用接口获取发料单 try { var body = new GetOutOrderListByStatusRequest() { IsMXPD = false, OrderExeStatus = new List() { OutOrderExeStatus.开始发料, OutOrderExeStatus.发料完成 } }; var Result = ApiHelp.GetDataFromHttp>(LocalFile.Config.ApiIpHost + "outstore/getOutOrderListByStatus", body, "POST"); if (Result != null && Result.Code == 200) { OutOrderList = new ObservableCollection(Result.Data.Lists); if (!string.IsNullOrEmpty(OrderNumber)) { if (selectedOutOrder == null) { SelectedOutOrder = OutOrderList?.Where(t => t.OrderNumber == OrderNumber).FirstOrDefault(); } Logs.Write($"【RefreshOutOrderList3】SelectedOutOrder{SelectedOutOrder?.OrderNumber}", LogsType.Info); } else { if (selectedOutOrder == null) SelectedOutOrder = OutOrderList?.FirstOrDefault(); Logs.Write($"【RefreshOutOrderList3】SelectedOutOrder{SelectedOutOrder?.OrderNumber}", LogsType.Info); } } else if (Result != null && !string.IsNullOrEmpty(Result.Message)) { Growl.Warning(Result.Message); } } catch (Exception ex) { Growl.Warning(ex.Message); } } #endregion } public void RefreshDataGridItemSource() { lock (flag) { if (SelectedOutOrder == null) { Logs.Write("【RefreshDataGridItemSource】选择的单据为空无法进行查询", LogsType.Info); SelectedOutOrder = OutOrderList?.FirstOrDefault(); return; } } #region 调用接口获取出库单物料明细 Task.Run(() => { Logs.Write($"【RefreshDataGridItemSource】{SelectedOutOrder?.OrderNumber}", LogsType.Info); var body = new GetOutOrderDetailRequest() { OrderId = SelectedOutOrder.Id, OrderNumber = SelectedOutOrder.OrderNumber, UserName = LocalStatic.CurrentUser, DeviceType = LocalFile.Config.DeviceType, }; var Result = ApiHelp.GetDataFromHttp>>(LocalFile.Config.ApiIpHost + "outStore/getOutOrderMatDetail", body, "POST", true); if (Result != null && Result.Code == 200) { if (Result.Data.Count > 0) { var list = Result.Data.OrderBy(t => t.IsSended).ToList(); Logs.Write($"【RefreshDataGridItemSource】Result.Data.Count > 0{SelectedOutOrder?.OrderNumber}", LogsType.Info); //App.Current.Dispatcher.Invoke(() => //{ DataGridItemSource = new ObservableCollection(list); //}); OrderStatus = Result.Message; if (OrderStatus == OutOrderStatus.全部发料.ToString()) { //全部发料就默认所有货架结束了这个单子 } } else { Logs.Write("【RefreshDataGridItemSource】Result.Data.Count <= 0,清空明细", LogsType.Info); App.Current.Dispatcher.Invoke(() => { DataGridItemSource?.Clear(); }); Growl.Warning("该单据未查询到发料明细!"); } } else if (Result != null) { Growl.Warning(Result.Message); } else { Growl.Warning("调用接口失败!"); } }); #endregion } #endregion } }