Files
wcs/货架标准上位机/ViewModels/OutInventoryDocumentViewModel.cs
hehaibing-1996 6933a10119 提交代码
2024-07-22 17:33:52 +08:00

515 lines
17 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using HandyControl.Controls;
using Ping9719.WpfEx.Mvvm;
using QRCoder;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media.Imaging;
using WCS.Model;
using WCS.Model.ApiModel.MatBaseInfo;
using WCS.Model.ApiModel.OutStore;
using .Api;
using .Views.Controls;
namespace .ViewModels
{
public class OutInventoryDocumentViewModel : BindableBase
{
public OutInventoryDocumentViewModel()
{
BtnSearch();
}
#region Properties界面绑定的实体
private ObservableCollection<OutOrderModel> dataGridItemSource;
public ObservableCollection<OutOrderModel> DataGridItemSource
{
get { return dataGridItemSource; }
set
{
SetProperty(ref dataGridItemSource, value);
}
}
public OutOrderModel selectedataGridItem;
public OutOrderModel SelectedataGridItem
{
get { return selectedataGridItem; }
set
{
SetProperty(ref selectedataGridItem, value);
}
}
private string orderNumber;
public string OrderNumber
{
get { return orderNumber; }
set
{
SetProperty(ref orderNumber, value);
}
}
private string orderType;
public string OrderType
{
get { return orderType; }
set
{
SetProperty(ref orderType, value);
}
}
private string orderSource;
public string OrderSource
{
get { return orderSource; }
set
{
SetProperty(ref orderSource, value);
}
}
#endregion
#region Command
public ICommand BtnSearchCommand { get => new DelegateCommand(BtnSearchReset); }
public void BtnSearchReset()
{
BtnSearch(true);
}
public void BtnSearch(bool IsPageReset = true)
{
if (CurrentPage == 0 || IsPageReset)
{
CurrentPage = 1;
return;
}
#region
try
{
var body = new GetOutOrderListRequest()
{
OrderNumber = OrderNumber,
OrderType = OrderType,
OrderSource = OrderSource,
UserName = LocalStatic.CurrentUser,
DeviceType = LocalFile.Config.DeviceType,
PageNumber = CurrentPage,
PageSize = PageSize,
};
var Result = ApiHelp.GetDataFromHttp<PageQueryResponse<OutOrderModel>>(LocalFile.Config.ApiIpHost + "outStore/GetOutOrderList", body, "POST");
if (Result != null && Result.Data != null && Result.Data.Lists != null)
{
DataGridItemSource = new ObservableCollection<OutOrderModel>(Result.Data.Lists);
MaxPage = Result.Data.MaxPage;
TotalCount = Result.Data.TotalCount;
}
}
catch (Exception ex)
{
Growl.Error("加载数据失败:" + ex.Message);
}
finally
{
}
#endregion
}
public ICommand BtnResetCommand { get => new DelegateCommand(BtnReset); }
public void BtnReset()
{
OrderNumber = string.Empty;
OrderType = string.Empty;
OrderSource = string.Empty;
}
//public ICommand BtnDeleteCommand { get => new DelegateCommand(BtnDelete); }
//public void BtnDelete()
//{
//}
public ICommand BtnOutOrderCommand { get => new DelegateCommand(BtnOutOrder); }
public void BtnOutOrder()
{
var window = new OutInventoryAddDucumentView();
window.Owner = Application.Current.MainWindow;
window.Topmost = true;
var result = window.ShowDialog();
if (result == true)
BtnSearch(true);
}
//导入出库
public ICommand BtnImportDocumentCommand { get => new DelegateCommand(BtnImportDocument); }
public void BtnImportDocument()
{
var window = new OutInventoryImportDucumentView();
window.Owner = Application.Current.MainWindow;
var result = window.ShowDialog();
if (result == true)
BtnSearch(true);
}
public ICommand BtnOrderDetailCommand { get => new DelegateCommand(BtnOrderDetail); }
public void BtnOrderDetail()
{
try
{
if (DataGridItemSource == null)
{
Growl.Warning("未勾选数据!");
return;
}
//判断是否勾选数据
var selectedOutOrder = DataGridItemSource.Where(t => t.IsSelected)
.FirstOrDefault();
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<ResponseCommon<List<OutOrderDetailModel>>>(LocalFile.Config.ApiIpHost + "outStore/getOutOrderDetail", body, "POST");
if (Result != null && Result.Code == 200)
{
if (Result.Data.Count > 0)
{
//打开窗体
var window = new OutInventoryDocumentDetailView(Result.Data);
window.Owner = Application.Current.MainWindow;
window.ShowDialog();
}
else
{
Growl.Warning("该单据没有单据明细!");
}
}
else if (Result != null)
{
Growl.Warning(Result.Message);
}
else
{
Growl.Warning("调用接口失败!");
}
#endregion
}
catch (Exception ex)
{
Growl.Error("出现异常:" + ex.Message);
}
finally
{
}
}
public ICommand BtnOrderMatDetailCommand { get => new DelegateCommand(BtnOrderMatDetail); }
public void BtnOrderMatDetail()
{
try
{
if (DataGridItemSource == null)
{
Growl.Warning("未勾选数据!");
return;
}
//判断是否勾选数据
var selectedOutOrder = DataGridItemSource.Where(t => t.IsSelected)
.FirstOrDefault();
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<ResponseCommon<List<OutOrderMatDetailModel>>>(LocalFile.Config.ApiIpHost + "outStore/getOutOrderMatDetail", body, "POST");
if (Result != null && Result.Code == 200)
{
if (Result.Data.Count > 0)
{
//打开窗体
var window = new OutInventoryDocumentMatDetailView(Result.Data);
window.Owner = Application.Current.MainWindow;
window.ShowDialog();
}
else
{
Growl.Warning("该单据没有发料明细!");
}
}
else if (Result != null)
{
Growl.Warning(Result.Message);
}
else
{
Growl.Warning("调用接口失败!");
}
#endregion
}
catch (Exception ex)
{
Growl.Error("出现异常:" + ex.Message);
}
finally
{
}
}
//开始入库 如果成功就直接跳转出库界面
public ICommand BtnStartCommand { get => new DelegateCommand(BtnStart); }
public void BtnStart()
{
try
{
if (DataGridItemSource == null)
{
Growl.Warning("未勾选数据!");
return;
}
//判断是否勾选数据
var selectedOutOrder = DataGridItemSource.Where(t => t.IsSelected)
.FirstOrDefault();
if (selectedOutOrder == null)
{
Growl.Warning("未勾选数据!");
return;
}
//判断是否是信息化货架
if (selectedOutOrder.ShelfTypeName == "信息化货架")
{
Growl.Info("请使用PDA进行出库");
//生成二维码
var qrCodeImage = GenerateQRCode(selectedOutOrder.Id.ToString() + "," + selectedOutOrder.OrderNumber);
//展示二维码
Dialog.Show(new ImageDialog(qrCodeImage));
return;
}
#region
var body = new GetOutOrderDetailRequest()
{
OrderId = selectedOutOrder.Id,
OrderNumber = selectedOutOrder.OrderNumber,
IsStart = true,
UserName = LocalStatic.CurrentUser,
DeviceType = LocalFile.Config.DeviceType,
};
var Result = ApiHelp.GetDataFromHttp<ResponseCommon>(LocalFile.Config.ApiIpHost + "outStore/goInOutstore", body, "POST");
if (Result != null && Result.Code == 200)
{
//成功后直接跳转
MainWindow1.viewModel.GoToOutVentoryView = true;
//刷新出库单列表
OutVentoryView.viewModel.RefreshOutOrderList(selectedOutOrder.OrderNumber);
Growl.Success("已跳转到物料出库页面!");
}
else if (Result != null)
{
Growl.Warning(Result.Message);
}
else
{
Growl.Warning("调用接口失败!");
}
#endregion
}
catch (Exception ex)
{
Growl.Error("出现异常:" + ex.Message);
}
finally
{
}
}
public BitmapImage GenerateQRCode(string data)
{
QRCodeGenerator qrGenerator = new QRCodeGenerator();
QRCodeData qrCodeData = qrGenerator.CreateQrCode(data, QRCodeGenerator.ECCLevel.Q);
QRCode qrCode = new QRCode(qrCodeData);
Bitmap qrCodeImage = qrCode.GetGraphic(20, Color.Black, Color.White, true);
// 将System.Drawing.Bitmap转换为System.Windows.Media.Imaging.BitmapImage
using (var memoryStream = new MemoryStream())
{
// 假设Bitmap的Save方法支持Png格式通常是这样
qrCodeImage.Save(memoryStream, ImageFormat.Png);
memoryStream.Position = 0;
var bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = memoryStream;
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.EndInit();
// 返回BitmapImage
return bitmapImage;
}
}
public ICommand BtnPauseCommand { get => new DelegateCommand(BtnPause); }
public void BtnPause()
{
try
{
if (DataGridItemSource == null)
{
Growl.Warning("未勾选数据!");
return;
}
//判断是否勾选数据
var selectedOutOrder = DataGridItemSource.Where(t => t.IsSelected)
.FirstOrDefault();
if (selectedOutOrder == null)
{
Growl.Warning("未勾选数据!");
return;
}
#region
var body = new GetOutOrderDetailRequest()
{
OrderId = selectedOutOrder.Id,
OrderNumber = selectedOutOrder.OrderNumber,
IsPause = true,
UserName = LocalStatic.CurrentUser,
DeviceType = LocalFile.Config.DeviceType,
};
var Result = ApiHelp.GetDataFromHttp<ResponseCommon>(LocalFile.Config.ApiIpHost + "outStore/goOutOutstore", body, "POST");
if (Result != null && Result.Code == 200)
{
//刷新出库单列表
OutVentoryView.viewModel.RefreshOutOrderList(selectedOutOrder.OrderNumber);
Growl.Success("已暂停出库!");
}
else if (Result != null)
{
OutVentoryView.viewModel.RefreshOutOrderList(OutVentoryView.viewModel.SelectedOutOrder?.OrderNumber);
Growl.Warning(Result.Message);
}
else
{
Growl.Warning("调用接口失败!");
}
#endregion
}
catch (Exception ex)
{
Growl.Error("出现异常:" + ex.Message);
}
finally
{
}
}
#endregion
#region PageOperation
private int currentPage;
public int CurrentPage
{
get { return currentPage; }
set
{
SetProperty(ref currentPage, value);
BtnSearch(false);
}
}
private int maxPage;
public int MaxPage
{
get { return maxPage; }
set { SetProperty(ref maxPage, value); }
}
//总数量
private int totalCount;
public int TotalCount
{
get { return totalCount; }
set { SetProperty(ref totalCount, value); }
}
private int pageSize = 10;
public int PageSize
{
get => pageSize;
set
{
SetProperty(ref pageSize, value);
BtnSearch(true);
}
}
public ICommand BtnFirstPageCommand { get => new DelegateCommand(BtnFirstPage); }
public void BtnFirstPage()
{
CurrentPage = 1;
}
public ICommand BtnPrePageCommand { get => new DelegateCommand(BtnPrePage); }
public void BtnPrePage()
{
if (CurrentPage > 1)
{
CurrentPage--;
}
}
public ICommand BtnNextPageCommand { get => new DelegateCommand(BtnNextPage); }
public void BtnNextPage()
{
if (CurrentPage < MaxPage)
{
CurrentPage++;
}
}
public ICommand BtnLastPageCommand { get => new DelegateCommand(BtnLastPage); }
public void BtnLastPage()
{
if (CurrentPage != MaxPage)
{
CurrentPage = MaxPage;
}
}
#endregion
}
}