From aecc1dc4db91e4a38cf21437dab8d8ff69c0a40b Mon Sep 17 00:00:00 2001 From: hehaibing-1996 Date: Wed, 29 May 2024 18:02:46 +0800 Subject: [PATCH] =?UTF-8?q?1.=E7=A7=BB=E6=A4=8D=E7=9B=9F=E8=AE=AF=E7=9A=84?= =?UTF-8?q?=E7=9B=98=E7=82=B9=E4=B8=8B=E6=9E=B6=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WCS.BLL/DbModels/OutOrder.cs | 6 + WCS.BLL/DbModels/OutOrderMatDetail.cs | 6 + WCS.BLL/HardWare/SmartShelf.cs | 5 +- WCS.BLL/Services/IService/IGenerateService.cs | 2 + WCS.BLL/Services/Service/GenerateService.cs | 9 + WCS.BLL/Services/Service/OutstoreService.cs | 32 +- .../ApiModel/InOutRecord/InOutRecordModel.cs | 1 + .../ElectronicSiloPushRequest.cs | 17 + .../GetOutOrderListByStatusRequest.cs | 2 + .../OutStore/SysOutOrderByMatSnRequest.cs | 5 + .../WebSocketModel/WebSocketMessageModel.cs | 1 + WCS.WebApi/Controllers/OutstoreController.cs | 7 +- .../MXViewModel/MXOutInventoryViewModel.cs | 1 + .../ViewModels/MXViewModel/MXPDViewModel.cs | 429 ++++++++++++++++++ .../Views/MXWindows/MXMainWindow.xaml | 16 +- .../Views/MXWindows/MXOutInventoryView.xaml | 2 +- 货架标准上位机/Views/MXWindows/MXPDView.xaml | 235 ++++++++++ .../Views/MXWindows/MXPDView.xaml.cs | 59 +++ 货架标准上位机/WebSocket.cs | 4 + 19 files changed, 821 insertions(+), 18 deletions(-) create mode 100644 WCS.Model/ApiModel/MXBackgroundThread/ElectronicSiloPushRequest.cs create mode 100644 货架标准上位机/ViewModels/MXViewModel/MXPDViewModel.cs create mode 100644 货架标准上位机/Views/MXWindows/MXPDView.xaml create mode 100644 货架标准上位机/Views/MXWindows/MXPDView.xaml.cs diff --git a/WCS.BLL/DbModels/OutOrder.cs b/WCS.BLL/DbModels/OutOrder.cs index 5fb7a59..c0e7957 100644 --- a/WCS.BLL/DbModels/OutOrder.cs +++ b/WCS.BLL/DbModels/OutOrder.cs @@ -81,6 +81,12 @@ namespace WCS.BLL.DbModels [SugarColumn(ColumnName = "create_user", Length = 100, IsNullable = true, ColumnDescription = "操作员")] public string CreateUser { get; set; } + /// + /// 是否是盟讯公司盘点生成的出库单 + /// + [SugarColumn(ColumnName = "is_MXPD", IsNullable = true, ColumnDescription = "是否是盟讯公司盘点生成的出库单")] + public bool? IsMXPD { get; set; } = false; + /// /// 用于绑定DataGrid中是否选择 /// diff --git a/WCS.BLL/DbModels/OutOrderMatDetail.cs b/WCS.BLL/DbModels/OutOrderMatDetail.cs index 3b284fd..4061dca 100644 --- a/WCS.BLL/DbModels/OutOrderMatDetail.cs +++ b/WCS.BLL/DbModels/OutOrderMatDetail.cs @@ -127,6 +127,12 @@ namespace WCS.BLL.DbModels [SugarColumn(ColumnName = "create_user", Length = 100, IsNullable = true, ColumnDescription = "操作员")] public string CreateUser { get; set; } + /// + /// 是否是盟讯公司盘点生成的出库单 + /// + [SugarColumn(ColumnName = "is_MXPD", IsNullable = true, ColumnDescription = "是否是盟讯公司盘点生成的出库单")] + public bool? IsMXPD { get; set; } = false; + /// /// 用于绑定中显示序号 /// diff --git a/WCS.BLL/HardWare/SmartShelf.cs b/WCS.BLL/HardWare/SmartShelf.cs index 1fa7268..bf6a5cd 100644 --- a/WCS.BLL/HardWare/SmartShelf.cs +++ b/WCS.BLL/HardWare/SmartShelf.cs @@ -1456,7 +1456,7 @@ namespace WCS.BLL.HardWare MatSupplier = inventoryDetail.MatSupplier, OrderNumber = orderMatDetails.OrderNumber, - Direction = DirectionEnum.出库, + Direction = orderMatDetails.IsMXPD == false ? DirectionEnum.出库 : DirectionEnum.盘点下架, }; //库位表 修改 storeInfo.CurrentMatSn = string.Empty; @@ -1509,6 +1509,7 @@ namespace WCS.BLL.HardWare var isExsistOut = CurrentOutStoreMatSNs.Any(); var tempOrder = CurrentOutOrder; + var isMXPD = orderMatDetails.IsMXPD == true; //通知前台刷新 Task.Run(() => { @@ -1519,7 +1520,7 @@ namespace WCS.BLL.HardWare { IsWarning = false, ClientIp = WebSocketIpAddress, - WarningType = WarningTypeEnum.通知刷新出库 + WarningType = isMXPD ? WarningTypeEnum.通知刷新盟讯盘点 : WarningTypeEnum.通知刷新出库 }; WarningManager.SendWarning(messageMode); }); diff --git a/WCS.BLL/Services/IService/IGenerateService.cs b/WCS.BLL/Services/IService/IGenerateService.cs index e9051a1..c7d1ac3 100644 --- a/WCS.BLL/Services/IService/IGenerateService.cs +++ b/WCS.BLL/Services/IService/IGenerateService.cs @@ -15,5 +15,7 @@ namespace WCS.BLL.Services.IService public Task generateStockTakingNumber(); public Task generateOutOrderNumber(); + + public Task generateMXPDOutOrderNumber(); } } diff --git a/WCS.BLL/Services/Service/GenerateService.cs b/WCS.BLL/Services/Service/GenerateService.cs index f89c77f..fb2ee2e 100644 --- a/WCS.BLL/Services/Service/GenerateService.cs +++ b/WCS.BLL/Services/Service/GenerateService.cs @@ -134,6 +134,15 @@ namespace WCS.BLL.Services.Service } } + public async Task generateMXPDOutOrderNumber() + { + lock (stockTakingFlag) + { + var serialNumber = GetSerialNumber(DocumentTypeEnum.出库单据); + return "PDOUT" + DateTime.Now.ToString("yyyyMMdd") + serialNumber.ToString().PadLeft(4, '0'); + } + } + public int GetSerialNumber(DocumentTypeEnum documentType) { var documentSerialNumber = DbHelp.db.Queryable() diff --git a/WCS.BLL/Services/Service/OutstoreService.cs b/WCS.BLL/Services/Service/OutstoreService.cs index ef0ac61..8f73893 100644 --- a/WCS.BLL/Services/Service/OutstoreService.cs +++ b/WCS.BLL/Services/Service/OutstoreService.cs @@ -131,6 +131,7 @@ namespace WCS.BLL.Services.Service { Code = 200, Message = $"出库单据同步成功!\r\n出库单据号为{request.OrderNumber}", + Data = request.OrderNumber }; ; } catch (Exception ex) @@ -231,7 +232,7 @@ namespace WCS.BLL.Services.Service MatQty = t.MatQty, MatSupplier = t.MatSupplier, MatCustomer = t.MatCustomer, - CreateUser = request.UserName + CreateUser = request.UserName, }; await DbHelp.db.Insertable(orderMatDetail).ExecuteCommandAsync(); }).ToList(); @@ -289,12 +290,14 @@ namespace WCS.BLL.Services.Service outOrder = new OutOrder() { OrderNumber = request.OrderNumber, + OrderType = request.OrderType, OutOrderExeStatus = OutOrderExeStatus.开始发料, OrderSource = "WCS前端", SyncType = SyncTypeEnum.ByMatSn, ShelfTypeName = "智能货架", ShelfTypeId = 0, GroupName = LocalFile.Config.GroupName, + IsMXPD = request.IsMXPD, }; outOrder.Id = await DbHelp.db.Insertable(outOrder).ExecuteReturnIdentityAsync(); outOrder = await DbHelp.db.Queryable().Where(t => t.OrderNumber == request.OrderNumber) @@ -327,7 +330,8 @@ namespace WCS.BLL.Services.Service MatQty = item.MatQty, MatSupplier = item.MatSupplier, MatCustomer = item.MatCustomer, - CreateUser = request.UserName + CreateUser = request.UserName, + IsMXPD = request.IsMXPD, }; await DbHelp.db.Insertable(orderMatDetail).ExecuteCommandAsync(); } @@ -362,7 +366,8 @@ namespace WCS.BLL.Services.Service MatQty = item.MatQty, MatSupplier = item.MatSupplier, MatCustomer = item.MatCustomer, - CreateUser = request.UserName + CreateUser = request.UserName, + IsMXPD = request.IsMXPD, }; await DbHelp.db.Insertable(orderMatDetail).ExecuteCommandAsync(); } @@ -396,7 +401,7 @@ namespace WCS.BLL.Services.Service return new ResponseCommon() { Code = 200, - Message = $"Success", + Message = outOrder.OrderNumber, Data = request.SnList }; @@ -466,7 +471,10 @@ namespace WCS.BLL.Services.Service }; } //直接查询 - var recordsQueryable = DbHelp.db.Queryable().Where(t => request.OrderExeStatus.Contains(t.OutOrderExeStatus)); + var recordsQueryable = DbHelp.db.Queryable() + .Where(t => request.OrderExeStatus.Contains(t.OutOrderExeStatus)) + .WhereIF(request.IsMXPD != null, t => t.IsMXPD == request.IsMXPD) + .WhereIF(LocalFile.Config.IsMx, t => t.CreateTime > DateTime.Now.AddDays(-3)); var totalCount = await recordsQueryable.CountAsync(); var records = await recordsQueryable @@ -693,7 +701,7 @@ namespace WCS.BLL.Services.Service var matCode = outOrderDetailCount.First().bb.Key; outOrderMatDetails = outOrderMatDetails.Where(t => t.MatCode == matCode) .ToList(); - Logs.Write($"出库单{order.OrderNumber},本次亮灯物料{matCode}!",LogsType.Outstore); + Logs.Write($"出库单{order.OrderNumber},本次亮灯物料{matCode}!", LogsType.Outstore); //分批次亮灯再计算一次出哪些货架 以免亮大灯不亮小灯 shelfIds = outOrderMatDetails.Select(t => t.StoreInfo.ShelfId) @@ -843,7 +851,7 @@ namespace WCS.BLL.Services.Service Dictionary> dict = new Dictionary>(); foreach (OutOrderMatDetail oomd in outOrderMatDetails) { - List mi= DbHelp.db.Queryable().Where(it => it.ModuleCode == oomd.StoreCode).ToList(); + List mi = DbHelp.db.Queryable().Where(it => it.ModuleCode == oomd.StoreCode).ToList(); if (mi.Count != 0) { if (!StoreCode.Contains(oomd.StoreCode)) @@ -875,7 +883,7 @@ namespace WCS.BLL.Services.Service { string sendIP = v.Key; TCPClient tCPClient = TCPClientManager.GetTCPClientByIPHost(sendIP); - byte[] lightOn = Helper.OutstoreLight(v.Value, LightColor,1); + byte[] lightOn = Helper.OutstoreLight(v.Value, LightColor, 1); tCPClient.Send(lightOn); Thread.Sleep(100); } @@ -895,12 +903,12 @@ namespace WCS.BLL.Services.Service foreach (string shelfcode in WarnLightShelfCode) { List si = DbHelp.db.Queryable().Where(it => it.ShelfCode == shelfcode).ToList(); - if (si.Count != 0) + if (si.Count != 0) { for (int i = 0; i < si.Count; i++) { TCPClient tCPClient = TCPClientManager.GetTCPClientByIPHost(si[i].ClientIp); - byte[] warnlightOn = Helper.OutstoreWarnLight(si[i].LightId,LightColor,1,0); + byte[] warnlightOn = Helper.OutstoreWarnLight(si[i].LightId, LightColor, 1, 0); tCPClient.Send(warnlightOn); Thread.Sleep(100); } @@ -1199,7 +1207,7 @@ namespace WCS.BLL.Services.Service } catch (Exception ee) { - Logs.Write("查询出库单据:"+request.OrderNumber+"对应库位灯颜色失败,"+ ee.Message); + Logs.Write("查询出库单据:" + request.OrderNumber + "对应库位灯颜色失败," + ee.Message); } Dictionary> dict = new Dictionary>(); foreach (OutOrderMatDetail oomd in outOrderMatDetails) @@ -1236,7 +1244,7 @@ namespace WCS.BLL.Services.Service { string sendIP = v.Key; TCPClient tCPClient = TCPClientManager.GetTCPClientByIPHost(sendIP); - byte[] lightOn = Helper.OutstoreLight(v.Value, LightColor,0); + byte[] lightOn = Helper.OutstoreLight(v.Value, LightColor, 0); tCPClient.Send(lightOn); Thread.Sleep(100); } diff --git a/WCS.Model/ApiModel/InOutRecord/InOutRecordModel.cs b/WCS.Model/ApiModel/InOutRecord/InOutRecordModel.cs index 4cad1a5..6782aa6 100644 --- a/WCS.Model/ApiModel/InOutRecord/InOutRecordModel.cs +++ b/WCS.Model/ApiModel/InOutRecord/InOutRecordModel.cs @@ -40,5 +40,6 @@ namespace WCS.Model.ApiModel.InOutRecord 出库 = 1, 丢失 = 2, 盘点 = 3, + 盘点下架 = 4, } } diff --git a/WCS.Model/ApiModel/MXBackgroundThread/ElectronicSiloPushRequest.cs b/WCS.Model/ApiModel/MXBackgroundThread/ElectronicSiloPushRequest.cs new file mode 100644 index 0000000..4213f55 --- /dev/null +++ b/WCS.Model/ApiModel/MXBackgroundThread/ElectronicSiloPushRequest.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WCS.Model.ApiModel.MXBackgroundThread +{ + public class ElectronicSiloPushRequest + { + public string materialCode { get; set; } + public string warehouseCode { get; set; } + } + + public class ElectronicSiloPushDto + { + public string materialBar { get; set; } + } +} diff --git a/WCS.Model/ApiModel/OutStore/GetOutOrderListByStatusRequest.cs b/WCS.Model/ApiModel/OutStore/GetOutOrderListByStatusRequest.cs index bfedf5d..3d1018e 100644 --- a/WCS.Model/ApiModel/OutStore/GetOutOrderListByStatusRequest.cs +++ b/WCS.Model/ApiModel/OutStore/GetOutOrderListByStatusRequest.cs @@ -10,5 +10,7 @@ namespace WCS.Model public class GetOutOrderListByStatusRequest : PageQueryRequestBase { public List OrderExeStatus { get; set; } + + public bool? IsMXPD { get; set; } } } diff --git a/WCS.Model/ApiModel/OutStore/SysOutOrderByMatSnRequest.cs b/WCS.Model/ApiModel/OutStore/SysOutOrderByMatSnRequest.cs index e60189d..bff9ecf 100644 --- a/WCS.Model/ApiModel/OutStore/SysOutOrderByMatSnRequest.cs +++ b/WCS.Model/ApiModel/OutStore/SysOutOrderByMatSnRequest.cs @@ -17,6 +17,11 @@ namespace WCS.Model /// public string OrderType { get; set; } + /// + /// 是否是盟讯公司盘点生成的出库单 + /// + public bool IsMXPD { get; set; } = false; + public List SnList { get; set; } } } diff --git a/WCS.Model/WebSocketModel/WebSocketMessageModel.cs b/WCS.Model/WebSocketModel/WebSocketMessageModel.cs index 4838fcf..34b693c 100644 --- a/WCS.Model/WebSocketModel/WebSocketMessageModel.cs +++ b/WCS.Model/WebSocketModel/WebSocketMessageModel.cs @@ -56,5 +56,6 @@ namespace WCS.Model.WebSocketModel 恢复正常 = 50, 通知刷新出库 = 51, 通知刷新盘点 = 52, + 通知刷新盟讯盘点 = 53, } } diff --git a/WCS.WebApi/Controllers/OutstoreController.cs b/WCS.WebApi/Controllers/OutstoreController.cs index 7481c2d..33bfcad 100644 --- a/WCS.WebApi/Controllers/OutstoreController.cs +++ b/WCS.WebApi/Controllers/OutstoreController.cs @@ -106,7 +106,12 @@ namespace WebApi.Controllers { if (string.IsNullOrEmpty(request.OrderNumber)) { - request.OrderNumber = await _generateService.generateOutOrderNumber(); + if (request.IsMXPD) + { + request.OrderNumber = await _generateService.generateMXPDOutOrderNumber(); + } + else + request.OrderNumber = await _generateService.generateOutOrderNumber(); } return await _outstoreService.SysOutOrderByMatSn(request); } diff --git a/货架标准上位机/ViewModels/MXViewModel/MXOutInventoryViewModel.cs b/货架标准上位机/ViewModels/MXViewModel/MXOutInventoryViewModel.cs index c343196..b0b6de5 100644 --- a/货架标准上位机/ViewModels/MXViewModel/MXOutInventoryViewModel.cs +++ b/货架标准上位机/ViewModels/MXViewModel/MXOutInventoryViewModel.cs @@ -231,6 +231,7 @@ namespace 货架标准上位机.ViewModel { var body = new GetOutOrderListByStatusRequest() { + IsMXPD = false, OrderExeStatus = new List() { OutOrderExeStatus.开始发料, OutOrderExeStatus.发料完成 } }; var Result = ApiHelp.GetDataFromHttp>(LocalFile.Config.ApiIpHost + "outstore/getOutOrderListByStatus", body, "POST"); diff --git a/货架标准上位机/ViewModels/MXViewModel/MXPDViewModel.cs b/货架标准上位机/ViewModels/MXViewModel/MXPDViewModel.cs new file mode 100644 index 0000000..c98af57 --- /dev/null +++ b/货架标准上位机/ViewModels/MXViewModel/MXPDViewModel.cs @@ -0,0 +1,429 @@ +using HandyControl.Controls; +using HandyControl.Data; +using MiniExcelLibs; +using Newtonsoft.Json; +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.MatInventoryDetail; +using WCS.Model.ApiModel.MXBackgroundThread; +using WCS.Model.ApiModel.OutStore; +using WCS.Model.ApiModel.Stocktaking; +using 货架标准上位机.Api; +using 货架标准上位机.ViewModel; + +namespace 货架标准上位机.ViewModel +{ + public class MXPDViewModel : BindableBase + { + public MXPDViewModel() + { + RefreshOutOrderList(); + } + + #region Property + private OutOrderModel selectedOutOrder; + public OutOrderModel SelectedOutOrder + { + get { return selectedOutOrder; } + set + { + SetProperty(ref selectedOutOrder, value); + if (selectedOutOrder != null) + { + SelectedOutOrderNumber = selectedOutOrder.OrderNumber; + RefreshDataGridItemSource(); + } + else + { + DataGridItemSource?.Clear(); + } + } + } + + 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 int totalCount; + public int TotalCount + { + get => totalCount; + set { SetProperty(ref totalCount, value); } + } + + + private string orderStatus; + public string OrderStatus + { + get { return orderStatus; } + set + { + SetProperty(ref orderStatus, value); + } + } + + public void RefreshCount() + { + Task.Run(() => + { + SendedPan = dataGridItemSource.Where(t => t.IsSended).Count(); + TotalPan = dataGridItemSource.Count(); + TotalCount = dataGridItemSource.Sum(t => t.MatQty); + }); + } + + + private string matCode; + public string MatCode + { + get => matCode; + set { SetProperty(ref matCode, value); } + } + + private string wareHouseCode; + public string WareHouseCode + { + get => wareHouseCode; + set { SetProperty(ref wareHouseCode, value); } + } + #endregion + + #region Command + public ICommand BtnOutOrderCommand { get => new DelegateCommand(BtnOutOrder); } + public void BtnOutOrder() + { + var window = new MXOutOrderView(); + window.Owner = Application.Current.MainWindow; + 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("已成功开始出库!"); + RefreshDataGridItemSource(); + } + 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("已成功结束盘点!"); + RefreshDataGridItemSource(); + } + else if (Result != null) + { + Growl.Warning(Result.Message); + } + else + { + Growl.Warning("操作失败:调用接口失败!"); + } + #endregion + } + catch (Exception ex) + { + Growl.Error("出现异常:" + ex.Message); + } + finally + { + } + } + + public ICommand BtnQueryCommand { get => new DelegateCommand(BtnQuery); } + public void BtnQuery() + { + try + { + //请求WMS获取物料明细 + var request = new ElectronicSiloPushRequest() + { + materialCode = MatCode, + warehouseCode = WareHouseCode + }; + var requeststr = JsonConvert.SerializeObject(request); + var result = ApiHelp.MXGetDataFromHttp>(requeststr, "http://192.168.2.23:9213/integrate/inOut/electronicSiloPush", "POST", true); + if (result != null && (result.code == 200) && result.data != null && result.data.Count() > 0) + { + //通过返回的物料明细查询当前库存中有的数据 + var matSns = result.data.Select(t => t.materialBar).ToList(); + //调用 比对库存数据 获取库存中有的数据 + #region 调用接口 比对库存数据 获取库存中有的数据 + try + { + var body = new CompareMatInventoryDetailRequest() + { + MatSns = matSns, + }; + var Result = ApiHelp.GetDataFromHttp>(LocalFile.Config.ApiIpHost + "matInventoryDetail/compareMatInventoryDetail", body, "POST", true); + + //查询到物料信息 + if (Result != null && Result.Data != null && Result.Data.Lists != null && Result.Data.Lists.Count != 0) + { + var count = Result.Data.Lists.Count; + //是否生成盘点单 实际上是出库单 + var dialogResult = HandyControl.Controls.MessageBox.Show($"共查询到有{count}盘物料,是否生成盘点单?", "提示", MessageBoxButton.YesNo); + if (dialogResult == MessageBoxResult.Yes) + { + #region 调用接口保存出库单据 + var body1 = new SysOutOrderByMatSnRequest() + { + IsMXPD = true, + OrderType = "出库", + OrderSource = "WCS前端", + SnList = Result.Data.Lists.Select(t => t.MatSN).ToList(), + DeviceType = LocalFile.Config.DeviceType, + UserName = LocalStatic.CurrentUser + }; + var Result1 = ApiHelp.GetDataFromHttp(LocalFile.Config.ApiIpHost + "outstore/sysOutOrderByMatSn", body1, "POST"); + if (Result1 != null && Result1.Code == 200) + { + //出库单据保存成功 刷新左侧出库单列表 + MXPDView.viewModel.RefreshOutOrderList(Result1.Message.ToString()); + Growl.Success("盘点单据保存成功,请点击【开始盘点】进行盘点下架!"); + } + else if (Result1 != null) + { + Growl.Warning(Result1.Message); + } + #endregion + } + else + return; + } + else if (Result != null && Result.Code == 200 && (Result.Data == null || Result.Data.Lists == null || Result.Data.Lists.Count == 0)) + { + HandyControl.Controls.MessageBox.Show($"未查询到需要盘点的明细!所推荐物料在此货架上不存在,请确认是否在其他货架上!\r\n{string.Join(",\r\n", matSns)}"); + DataGridItemSource = null; + } + else + { + HandyControl.Controls.MessageBox.Show($"未查询到需要盘点的明细!请重试!"); + DataGridItemSource = null; + } + } + catch (Exception e) + { + HandyControl.Controls.MessageBox.Show($"未查询到需要盘点的明细!请重试!"); + DataGridItemSource = null; + } + #endregion + } + else + { + Growl.Warning("获取WMS系统库存数据失败!" + result?.message); + } + + } + catch (Exception ex) + { + + } + finally + { + //dia.Close(); + //dia.Collapse(); + } + } + + public void RefreshOutOrderList(string OrderNumber = "") + { + #region 调用接口获取发料单 + try + { + var body = new GetOutOrderListByStatusRequest() + { + OrderExeStatus = new List() { OutOrderExeStatus.开始发料, OutOrderExeStatus.发料完成 }, + IsMXPD = true, + }; + 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)) + { + SelectedOutOrder = OutOrderList.Where(t => t.OrderNumber == OrderNumber).FirstOrDefault(); + } + } + else if (Result != null && !string.IsNullOrEmpty(Result.Message)) + { + Growl.Warning(Result.Message); + } + } + catch (Exception ex) + { + Growl.Warning(ex.Message); + } + #endregion + } + + public void RefreshDataGridItemSource() + { + if (SelectedOutOrder == null) + { + //选择的单据为空无法进行查询 + return; + } + #region 调用接口获取出库单物料明细 + Task.Run(() => + { + 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"); + if (Result != null && Result.Code == 200) + { + if (Result.Data.Count > 0) + { + DataGridItemSource = new ObservableCollection(Result.Data); + OrderStatus = Result.Message; + } + else + { + App.Current.Dispatcher.Invoke(() => + { + DataGridItemSource?.Clear(); + }); + Growl.Warning("该单据未查询到发料明细!"); + } + } + else if (Result != null) + { + Growl.Warning(Result.Message); + } + else + { + Growl.Warning("调用接口失败!"); + } + }); + #endregion + } + #endregion + } +} diff --git a/货架标准上位机/Views/MXWindows/MXMainWindow.xaml b/货架标准上位机/Views/MXWindows/MXMainWindow.xaml index 55b1e73..f8ac1c8 100644 --- a/货架标准上位机/Views/MXWindows/MXMainWindow.xaml +++ b/货架标准上位机/Views/MXWindows/MXMainWindow.xaml @@ -127,7 +127,7 @@ - 盘点单据 + PDA盘点单 @@ -139,7 +139,7 @@ - 物料盘点 + PDA盘点 @@ -147,6 +147,18 @@ + + + + + 物料盘点 + + + + + + + diff --git a/货架标准上位机/Views/MXWindows/MXOutInventoryView.xaml b/货架标准上位机/Views/MXWindows/MXOutInventoryView.xaml index 0c98816..f3f7713 100644 --- a/货架标准上位机/Views/MXWindows/MXOutInventoryView.xaml +++ b/货架标准上位机/Views/MXWindows/MXOutInventoryView.xaml @@ -133,7 +133,7 @@ - + diff --git a/货架标准上位机/Views/MXWindows/MXPDView.xaml b/货架标准上位机/Views/MXWindows/MXPDView.xaml new file mode 100644 index 0000000..3719740 --- /dev/null +++ b/货架标准上位机/Views/MXWindows/MXPDView.xaml @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/货架标准上位机/Views/MXWindows/MXPDView.xaml.cs b/货架标准上位机/Views/MXWindows/MXPDView.xaml.cs new file mode 100644 index 0000000..4a001f2 --- /dev/null +++ b/货架标准上位机/Views/MXWindows/MXPDView.xaml.cs @@ -0,0 +1,59 @@ +using Ping9719.WpfEx; +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 System.Text.RegularExpressions; +using 货架标准上位机.ViewModel; + +namespace 货架标准上位机 +{ + public partial class MXPDView : UserControlBase + { + public static MXPDViewModel viewModel { get; set; } = new MXPDViewModel(); + public MXPDView() + { + InitializeComponent(); + this.DataContext = viewModel; + } + + private void DataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) + { + try + { + DataGrid datagrid = sender as DataGrid; + datagrid.UnselectAllCells(); + } + catch + { + } + } + + private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e) + { + viewModel.RefreshOutOrderList(viewModel.SelectedOutOrderNumber); + } + private void ListView_PreviewMouseWheel(object sender, MouseWheelEventArgs e) + { + if (!e.Handled) + { + e.Handled = true; + // 激发一个鼠标滚轮事件,冒泡给外层ListView接收到 + var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta); + eventArg.RoutedEvent = UIElement.MouseWheelEvent; + eventArg.Source = sender; + var parent = ((Control)sender).Parent as UIElement; + parent.RaiseEvent(eventArg); + } + } + } +} diff --git a/货架标准上位机/WebSocket.cs b/货架标准上位机/WebSocket.cs index 90638d4..758acaf 100644 --- a/货架标准上位机/WebSocket.cs +++ b/货架标准上位机/WebSocket.cs @@ -108,6 +108,10 @@ namespace 货架标准上位机 StockTakingView.viewModel.RefreshDataGridItemSource(); client.Send(e.DataFrame.ToText()); break; + case WarningTypeEnum.通知刷新盟讯盘点: + MXPDView.viewModel.RefreshDataGridItemSource(); + client.Send(e.DataFrame.ToText()); + break; case WarningTypeEnum.恢复正常: var SolvedGuids = warning.SolvedGuids; SolvedGuids.ForEach(guid =>