1.增加盟讯公司业务逻辑相关适配 前后端增加配置参数“ISMX”进行控制

2.前端websocket取消心跳机制(原有心跳和断线重连当服务端网线断开后需要等tcp保活期到期后才能发现重连),自己实现心跳和重连
3.前端关闭后任占用后台线程问题修复
This commit is contained in:
hehaibing-1996
2024-05-25 17:25:27 +08:00
parent 472862a978
commit 00621bcd55
82 changed files with 3404 additions and 240 deletions

View File

@ -13,6 +13,7 @@ using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Input;
using WCS.Model;
using WCS.Model.ApiModel.MXBackgroundThread;
namespace .Api
{
@ -320,5 +321,100 @@ namespace 货架标准上位机.Api
return default(T);
}
}
/// <summary>
/// 调用接口-长延时MX MES接口返回时间偶尔10秒+为保证业务能正常进行所以增加此接口)
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="data"></param>
/// <param name="url"></param>
/// <param name="httpMethod"></param>
/// <param name="isSaveLog"></param>
/// <returns></returns>
public static ApiResult<T> MXGetDataFromHttpLongWait<T>(string data, string url, string httpMethod, bool isSaveLog = false)
{
Guid guid = Guid.NewGuid();
try
{
if (isSaveLog)
Logs.Write($"【{guid}】开始请求调用接口 url{url} 请求方式:{httpMethod} 数据:{data}");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = httpMethod;
request.ContentType = "application/json";
request.Timeout = 20000;
if (!string.IsNullOrEmpty(data))
{
string strContent = data; //参数data
using (StreamWriter dataStream = new StreamWriter(request.GetRequestStream()))
{
dataStream.Write(strContent);
dataStream.Close();
}
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string encoding = response.ContentEncoding;
if (encoding == null || encoding.Length < 1)
{
encoding = "UTF-8"; //默认编码
}
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));
string retString = reader.ReadToEnd();
if (isSaveLog)
Logs.Write($"【{guid}】请求调用接口结束 返回数据为{retString}");
return JsonConvert.DeserializeObject<ApiResult<T>>(retString);
}
catch (Exception ex)
{
Logs.Write($"【{guid}】请求调用遇到异常 异常信息为{ex.Message}");
return new ApiResult<T>()
{
code = 500,
message = ex.Message,
};
}
}
public static ApiResult<T> MXGetDataFromHttp<T>(string data, string url, string httpMethod, bool isSaveLog = false)
{
Guid guid = Guid.NewGuid();
try
{
if (isSaveLog)
Logs.Write($"【{guid}】开始请求调用接口 url{url} 请求方式:{httpMethod} 数据:{data}");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = httpMethod;
request.ContentType = "application/json";
request.Timeout = 8000;
if (!string.IsNullOrEmpty(data))
{
string strContent = data; //参数data
using (StreamWriter dataStream = new StreamWriter(request.GetRequestStream()))
{
dataStream.Write(strContent);
dataStream.Close();
}
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string encoding = response.ContentEncoding;
if (encoding == null || encoding.Length < 1)
{
encoding = "UTF-8"; //默认编码
}
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));
string retString = reader.ReadToEnd();
if (isSaveLog)
Logs.Write($"【{guid}】请求调用接口结束 返回数据为{retString}");
return JsonConvert.DeserializeObject<ApiResult<T>>(retString);
}
catch (Exception ex)
{
Logs.Write($"【{guid}】请求调用遇到异常 异常信息为{ex.Message}");
return new ApiResult<T>()
{
code = 500,
message = ex.Message,
};
}
}
}
}

View File

@ -2,7 +2,6 @@
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:货架标准上位机"
StartupUri="Views/MainWindows/MainWindow1.xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:hc="https://handyorg.github.io/handycontrol">
<Application.Resources>

View File

@ -3,8 +3,10 @@ using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Management.Instrumentation;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
namespace
{
@ -13,5 +15,20 @@ namespace 货架标准上位机
/// </summary>
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
if (LocalFile.Config.IsMx)
{
MainWindow = new MXMainWindow();
}
else
{
MainWindow = new MainWindow1();
}
MainWindow.ShowDialog();
}
}
}

View File

@ -45,6 +45,26 @@ namespace 货架标准上位机
/// 串口扫码枪延时
/// </summary>
public int ScannerTimeOut { get; set; }
#region
public bool IsMx { get; set; }
/// <summary>
///MX-获取要料单接口地址
/// </summary>
public string GetPickOrderUrl { get; set; }
/// <summary>
///MX-获取要料明细接口地址
/// </summary>
public string RecommendedBarCode { get; set; }
/// <summary>
///MX-首盘发料明细接口地址
/// </summary>
public string FirstSendRecommendedBarCode { get; set; }
/// <summary>
///MX-后续发料明细接口地址
/// </summary>
public string ElectronicSiloPush { get; set; }
#endregion
}
public class JsSysConfig

View File

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -0,0 +1,305 @@
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 .Api;
using .ViewModel;
namespace .ViewModel
{
public class MXOutInventoryViewModel : BindableBase
{
public MXOutInventoryViewModel()
{
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<OutOrderModel> outOrderList;
public ObservableCollection<OutOrderModel> OutOrderList
{
get => outOrderList;
set
{
SetProperty(ref outOrderList, value);
}
}
private ObservableCollection<OutOrderMatDetailModel> dataGridItemSource;
public ObservableCollection<OutOrderMatDetailModel> 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(() =>
{
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.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<ResponseCommon>(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<ResponseCommon>(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 void RefreshOutOrderList(string OrderNumber = "")
{
#region
try
{
var body = new GetOutOrderListByStatusRequest()
{
OrderExeStatus = new List<OutOrderExeStatus>() { OutOrderExeStatus., OutOrderExeStatus. }
};
var Result = ApiHelp.GetDataFromHttp<PageQueryResponse<OutOrderModel>>(LocalFile.Config.ApiIpHost + "outstore/getOutOrderListByStatus", body, "POST");
if (Result != null && Result.Code == 200)
{
OutOrderList = new ObservableCollection<OutOrderModel>(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<ResponseCommon<List<OutOrderMatDetailModel>>>(LocalFile.Config.ApiIpHost + "outStore/getOutOrderMatDetail", body, "POST");
if (Result != null && Result.Code == 200)
{
if (Result.Data.Count > 0)
{
DataGridItemSource = new ObservableCollection<OutOrderMatDetailModel>(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
}
}

View File

@ -0,0 +1,216 @@
using HandyControl.Controls;
using HandyControl.Data;
using MiniExcelLibs;
using Newtonsoft.Json;
using Ping9719.WpfEx.Mvvm;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Input;
using TouchSocket.Core;
using System.Windows.Markup;
using System.Security.Policy;
using WCS.Model.ApiModel.MXBackgroundThread;
using ;
using WCS.Model.ApiModel.MatInventoryDetail;
using .Api;
using System.Runtime.CompilerServices;
using WCS.Model;
namespace .ViewModel
{
public class MXOutOrderDetailViewViewModel : BindableBase
{
/// <summary>
///
/// </summary>
/// <param name="billNumber"></param>
/// <param name="warehouseCode"></param>
/// <param name="orderProdNumbers"></param>
/// <param name="orderWorkNumbers"></param>
/// <param name="isFirstSend">是否是首盘发料</param>
public MXOutOrderDetailViewViewModel(
string billNumber, string warehouseCode
, string orderProdNumbers, string orderWorkNumbers
, int isFirstSend = 0, string reportSide = null
)
{
BillNumber = billNumber;
OrderProdNumbers = orderProdNumbers;
OrderWorkNumbers = orderWorkNumbers;
WarehouseCode = warehouseCode;
Task.Run(() =>
{
var request = new RecommendedBarCodeRequest()
{
pickBillNumber = billNumber,
warehouseCode = warehouseCode,
warehouseType = 20
};
var requeststr = JsonConvert.SerializeObject(request);
var url = string.Empty;
if (isFirstSend == 0)
{
url = LocalFile.Config.RecommendedBarCode;
}
else if (isFirstSend == 1)
{
request = new FistPushRecommendedBarCodeRequest()
{
pickBillNumber = billNumber,
warehouseCode = warehouseCode,
warehouseType = 20,
reportSide = reportSide,
};
requeststr = JsonConvert.SerializeObject(request);
url = LocalFile.Config.FirstSendRecommendedBarCode;
}
//后续料
else
{
url = LocalFile.Config.ElectronicSiloPush;
}
var result = ApiHelp.MXGetDataFromHttp<List<PickOrderDetailGetReturnList>>(requeststr, url, "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<PageQueryResponse<MatInventoryDetailModel>>(LocalFile.Config.ApiIpHost + "matInventoryDetail/compareMatInventoryDetail", body, "POST", true);
//查询到物料信息
if (Result != null && Result.Data != null && Result.Data.Lists != null && Result.Data.Lists.Count != 0)
{
DataGridItemSource = Result.Data.Lists;
}
else if (Result != null && Result.Code == 200 && (Result.Data == null || Result.Data.Lists == null || Result.Data.Lists.Count == 0))
{
MessageBox.Show($"未查询到领料明细!所推荐物料在此货架上不存在,请确认是否在其他货架上!\r\n{string.Join(",\r\n", matSns)}");
DataGridItemSource = null;
}
else
{
MessageBox.Show($"未查询到领料明细!请重试!");
DataGridItemSource = null;
}
}
catch (Exception e)
{
MessageBox.Show($"未查询到领料明细!请重试!");
DataGridItemSource = null;
}
#endregion
}
else if (result != null && result.code == 200 && (result.data == null || result.data.Count == 0))
{
Growl.Warning("未查询到物料明细MES推荐物料明细为空");
DataGridItemSource = null;
}
else
{
Growl.Warning("未查询到领料明细请求MES接口失败");
DataGridItemSource = null;
}
});
}
#region Property
private int selectedCount;
public int SelectedCount
{
get { return selectedCount; }
set { SetProperty(ref selectedCount, value); }
}
private int selectedPan;
public int SelectedPan
{
get { return selectedPan; }
set { SetProperty(ref selectedPan, value); }
}
//发料单号
private string billNumber;
public string BillNumber
{
get { return billNumber; }
set { SetProperty(ref billNumber, value); }
}
//订单号
private string orderProdNumbers;
public string OrderProdNumbers
{
get { return orderProdNumbers; }
set { SetProperty(ref orderProdNumbers, value); }
}
//工单号
private string orderWorkNumbers;
public string OrderWorkNumbers
{
get { return orderWorkNumbers; }
set { SetProperty(ref orderWorkNumbers, value); }
}
//输入的仓库代码
private string warehouseCode;
public string WarehouseCode
{
get { return warehouseCode; }
set
{
SetProperty(ref warehouseCode, value);
}
}
private List<MatInventoryDetailModel> dataGridItemSource;
public List<MatInventoryDetailModel> DataGridItemSource
{
get { return dataGridItemSource; }
set
{
SetProperty(ref dataGridItemSource, value);
RefreshCount();
}
}
public void RefreshCount()
{
Task.Run(() =>
{
try
{
SelectedCount = dataGridItemSource.Where(t => t.IsSelected == true).Sum(t => t.MatQty);
SelectedPan = dataGridItemSource.Where(t => t.IsSelected == true).Count();
}
catch { }
});
}
#endregion
#region Command
#endregion
}
}

View File

@ -0,0 +1,132 @@
using HandyControl.Controls;
using HandyControl.Data;
using MiniExcelLibs;
using Ping9719.WpfEx.Mvvm;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Input;
using TouchSocket.Core;
using Newtonsoft.Json;
using WCS.Model.ApiModel.MXBackgroundThread;
using .Api;
namespace .ViewModel
{
public class MXOutOrderViewModel : BindableBase
{
public MXOutOrderViewModel()
{
}
#region Property
private string matCode1;
public string MatCode1
{
get { return matCode1; }
set
{
SetProperty(ref matCode1, value);
}
}
private string orderProdNumber;
public string OrderProdNumber
{
get { return orderProdNumber; }
set
{
SetProperty(ref orderProdNumber, value);
}
}
private string orderWorkNumber;
public string OrderWorkNumber
{
get { return orderWorkNumber; }
set
{
SetProperty(ref orderWorkNumber, value);
}
}
private string pickBillNumber;
public string PickBillNumber
{
get { return pickBillNumber; }
set
{
SetProperty(ref pickBillNumber, value);
}
}
private string warehouseCode;
public string WarehouseCode
{
get { return warehouseCode; }
set
{
SetProperty(ref warehouseCode, value);
}
}
private List<PickOrder> dataGridItemSource;
public List<PickOrder> DataGridItemSource
{
get { return dataGridItemSource; }
set
{
SetProperty(ref dataGridItemSource, value);
}
}
#endregion
#region Command
public ICommand BtnSearchCommand { get => new DelegateCommand(BtnSearch); }
public void BtnSearch()
{
Task.Run(() =>
{
var request = new PickOrderRequest()
{
orderProdNumber = OrderProdNumber,
orderWorkNumber = OrderWorkNumber,
pickBillNumber = PickBillNumber
};
var requeststr = JsonConvert.SerializeObject(request);
var result = ApiHelp.MXGetDataFromHttpLongWait<List<PickOrder>>(requeststr, LocalFile.Config.GetPickOrderUrl, "POST");
if (result != null && result.code == 200 && result.data != null && result.data.Count() > 0)
{
DataGridItemSource = result.data;
}
else if (result != null && result.code == 200 && (result.data == null || result.data.Count == 0))
{
result.message = "输入的搜索条件未查询到发料单信息!";
Growl.Warning(result.message);
DataGridItemSource = result.data;
}
else
{
Growl.Warning("调用MES接口超时搜索失败");
}
});
}
#endregion
}
}

View File

@ -33,7 +33,7 @@ namespace 货架标准上位机.ViewModel
ClientIp = shelfInfoModel.ClientIp;
GroupName = shelfInfoModel.GroupName;
IsBind = shelfInfoModel.IsBind;
BindShelfCode = shelfInfoModel.BindShelfCode;
BigShelfCode = shelfInfoModel.BigShelfCode;
}
}
@ -51,7 +51,7 @@ namespace 货架标准上位机.ViewModel
ClientIp = ClientIp,
GroupName = GroupName,
IsBind = IsBind,
BindShelfCode = BindShelfCode,
BigShelfCode = BigShelfCode,
};
}
@ -156,13 +156,13 @@ namespace 货架标准上位机.ViewModel
}
}
private string bindShelfCode;
public string BindShelfCode
private string bigShelfCode;
public string BigShelfCode
{
get { return bindShelfCode; }
get { return bigShelfCode; }
set
{
SetProperty(ref bindShelfCode, value);
SetProperty(ref bigShelfCode, value);
}
}
#endregion

View File

@ -34,7 +34,7 @@
hc:BorderElement.CornerRadius="15"
MinHeight="40"
FontSize="20"
Content="&#xe61b;结束入库"
Content="&#xe61b;结束所有入库"
FontFamily="{StaticResource IconFont}"
Command="{Binding BtnEndCommand}">
</Button>
@ -42,17 +42,33 @@
</Grid>
</Border>
<Border Grid.Row="1" Margin="5,5,5,5" BorderThickness="1" Background="White" BorderBrush="DodgerBlue" CornerRadius="3">
<WrapPanel Name="scannersWrapPanel">
</WrapPanel>
</Border>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Border Margin="5,5,5,5" Grid.Column="0" BorderThickness="1" Background="White" BorderBrush="DodgerBlue" CornerRadius="3">
<WrapPanel Name="scannersWrapPanel">
</WrapPanel>
</Border>
<StackPanel Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Margin="5" FontWeight="Bold" FontSize="24" Text="停止入库扫码"></TextBlock>
<Image Margin="5" Width="120" Height="120" Source="/Resources/goOutInstore.png"></Image>
</StackPanel>
<!--<GroupBox Grid.Column="1" Header="停止入库码" Padding="10">-->
<!--<Border Background="{DynamicResource RegionBrush}" CornerRadius="4">-->
<!--</Border>-->
<!--</GroupBox>-->
</Grid>
<Border Grid.Row="2" Margin="5,5,5,5" BorderThickness="1" Background="White" BorderBrush="DodgerBlue" CornerRadius="3">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<GroupBox Grid.Column="1" Background="White" Padding="0" Style="{StaticResource GroupBoxTab}">
<GroupBox.Header>
<Grid Width="{Binding ActualWidth,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type GroupBox}}}">

View File

@ -36,8 +36,10 @@ namespace 货架标准上位机
t.ScannerDisplayControl = control;
scannersWrapPanel.Children.Add(control);
});
}
//ImageSource = new BitmapImage(new Uri("/Resources/goOutInstore.png"));
}
//public BitmapImage ImageSource { get; set; }
private void DataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{
DataGrid datagrid = sender as DataGrid;

View File

@ -0,0 +1,308 @@
<hc:Window xmlns:View="clr-namespace:货架标准上位机" x:Class="货架标准上位机.MXMainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:货架标准上位机"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:pi="https://github.com/ping9719/wpfex"
xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes"
mc:Ignorable="d" Closed="Window_Closed"
Title="{Binding Title}" NonClientAreaBackground="#FFDCEEFF" Height="800" Width="1280" Icon="/Resources/Logo.ico"
Background="#FFDCEEFF" WindowStartupLocation="CenterScreen" Loaded="load">
<!--标题栏-->
<hc:Window.NonClientAreaContent>
<StackPanel HorizontalAlignment="Right">
<Menu Height="29" Background="#FFDCEEFF">
<!--<MenuItem Height="29" Command="{Binding OpenUserCommand}" Visibility="{Binding IsLogin,Converter={StaticResource Boolean2VisibilityConverter}}">-->
<MenuItem Height="29" Command="{Binding OpenUserCommand}">
<MenuItem.Header>
<TextBlock Text="{Binding LoginName,Source={x:Static local:UserInfoView.viewModel},TargetNullValue=登录}" Foreground="DimGray" Margin="-5,0"></TextBlock>
</MenuItem.Header>
<MenuItem.Icon>
<TextBlock Text="&#xe61a;" FontSize="16" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
</MenuItem>
<!--<MenuItem Height="29" Width="35" Header="">
<MenuItem.Icon>
<TextBlock Text="&#xe62b;" FontSize="15" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
<MenuItem Width="120" Header="蓝色">
<MenuItem.Icon>
<TextBlock Text="&#xe604;" Foreground="Blue" FontSize="16" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
</MenuItem>
<MenuItem Width="120" Header="紫色">
<MenuItem.Icon>
<TextBlock Text="&#xe604;" Foreground="Purple" FontSize="16" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
</MenuItem>
<MenuItem Width="120" Header="黑夜">
<MenuItem.Icon>
<TextBlock Text="&#xe604;" Foreground="Black" FontSize="16" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
</MenuItem>
</MenuItem>-->
<MenuItem Height="29" Width="35">
<MenuItem.Icon>
<TextBlock Text="&#xe617;" FontSize="15" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
<MenuItem Width="120" Header="本地日志" Command="{Binding OpenLogCommand}">
<MenuItem.Icon>
<TextBlock Text="&#xe69d;" FontSize="16" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
</MenuItem>
<MenuItem Width="120" Header="操作说明" Command="{Binding OpenHelpCommand}">
<MenuItem.Icon>
<TextBlock Text="&#xe617;" FontSize="16" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
</MenuItem>
<MenuItem Width="120" Header="关 于" Command="{Binding OpenWeCommand}">
<MenuItem.Icon>
<TextBlock Text="&#xe6b3;" FontSize="16" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
</MenuItem>
</MenuItem>
</Menu>
</StackPanel>
</hc:Window.NonClientAreaContent>
<!--内容-->
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="3"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
</Grid.RowDefinitions>
<!--内容-->
<TabControl Grid.Row="1" TabStripPlacement="Left" Margin="5,0,5,2" Padding="0,0,3,0" BorderThickness="0" Style="{StaticResource TabControlRectangle}" PreviewKeyDown="tabControl_PreviewKeyDown">
<TabItem Padding="10,10,40,10" IsSelected="True">
<TabItem.Header>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<TextBlock Text="&#xe603;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">主页</TextBlock>
</StackPanel>
</TabItem.Header>
<hc:TransitioningContentControl TransitionMode="Fade">
<View:HomeView />
</hc:TransitioningContentControl>
</TabItem>
<TabItem Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.查询},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xe681;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">物料入库</TextBlock>
</StackPanel>
</TabItem.Header>
<hc:TransitioningContentControl TransitionMode="Fade">
<View:InInventoryView/>
</hc:TransitioningContentControl>
</TabItem>
<!--<TabItem Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.查询},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xe67d;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">出库单据</TextBlock>
</StackPanel>
</TabItem.Header>
<hc:TransitioningContentControl TransitionMode="Fade">
<View:OutInventoryDocumentView/>
</hc:TransitioningContentControl>
</TabItem>-->
<TabItem IsSelected="{Binding GoToOutVentoryView}" Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.查询},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xe67d;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">物料出库</TextBlock>
</StackPanel>
</TabItem.Header>
<hc:TransitioningContentControl TransitionMode="Fade">
<View:MXOutInventoryView/>
</hc:TransitioningContentControl>
</TabItem>
<TabItem Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.查询},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xe65f;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">盘点单据</TextBlock>
</StackPanel>
</TabItem.Header>
<hc:TransitioningContentControl TransitionMode="Fade">
<View:StocktakingDocumentView/>
</hc:TransitioningContentControl>
</TabItem>
<TabItem IsSelected="{Binding GoToStockTakingView}" Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.查询},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xe65f;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">物料盘点</TextBlock>
</StackPanel>
</TabItem.Header>
<hc:TransitioningContentControl TransitionMode="Fade">
<View:StockTakingView/>
</hc:TransitioningContentControl>
</TabItem>
<TabItem Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.查询},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xe63a;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">库存查询</TextBlock>
</StackPanel>
</TabItem.Header>
<hc:TransitioningContentControl TransitionMode="Fade">
<View:MatInventoryDetailView/>
</hc:TransitioningContentControl>
</TabItem>
<TabItem Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.查询},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xe60b;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">出入记录</TextBlock>
</StackPanel>
</TabItem.Header>
<hc:TransitioningContentControl TransitionMode="Fade">
<View:InOutRecordView/>
</hc:TransitioningContentControl>
</TabItem>
<TabItem Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.查询},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xe63a;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">库位管理</TextBlock>
</StackPanel>
</TabItem.Header>
<TabControl Style="{StaticResource TabControlBaseStyle.MouseOver}">
<TabItem Header="货架管理" >
<hc:TransitioningContentControl TransitionMode="Fade">
<View:ShelfInfoView />
</hc:TransitioningContentControl>
</TabItem>
<TabItem Header="模组管理">
<hc:TransitioningContentControl TransitionMode="Fade">
<View:ModuleInfoView />
</hc:TransitioningContentControl>
</TabItem>
<TabItem Header="库位管理">
<hc:TransitioningContentControl TransitionMode="Fade">
<View:StoreInfoView />
</hc:TransitioningContentControl>
</TabItem>
</TabControl>
</TabItem>
<!--<TabItem Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.查询},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xe662;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">物料维护</TextBlock>
</StackPanel>
</TabItem.Header>
<hc:TransitioningContentControl TransitionMode="Fade">
<View:MatBaseInfoView/>
</hc:TransitioningContentControl>
</TabItem>
<TabItem Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.查询},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xe662;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">物料明细</TextBlock>
</StackPanel>
</TabItem.Header>
<hc:TransitioningContentControl TransitionMode="Fade">
<View:MatInfoView/>
</hc:TransitioningContentControl>
</TabItem>-->
<TabItem Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.查询},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xe600;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">接口记录</TextBlock>
</StackPanel>
</TabItem.Header>
<hc:TransitioningContentControl TransitionMode="Fade">
<View:InterfaceRecordView/>
</hc:TransitioningContentControl>
</TabItem>
<TabItem Padding="10,10,40,10" >
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xe63f;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">权限</TextBlock>
</StackPanel>
</TabItem.Header>
<TabControl Margin="5" Style="{StaticResource TabControlBaseStyle.MouseOver}">
<TabItem Header="角色管理">
<hc:TransitioningContentControl TransitionMode="Fade">
<View:RoleView Margin="0,5"/>
</hc:TransitioningContentControl>
</TabItem>
<TabItem Header="用户管理" >
<hc:TransitioningContentControl TransitionMode="Fade">
<View:UserView Margin="0,5"/>
</hc:TransitioningContentControl>
</TabItem>
</TabControl>
</TabItem>
<TabItem Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.调试},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<TextBlock Text="&#xe601;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">调试</TextBlock>
</StackPanel>
</TabItem.Header>
<TabControl Margin="5" Style="{StaticResource TabControlBaseStyle.MouseOver}">
<TabItem Header="PLC">
<hc:TransitioningContentControl TransitionMode="Fade">
<View:DeviceView Margin="0,5"/>
</hc:TransitioningContentControl>
</TabItem>
<TabItem Header="扫码枪">
<hc:TransitioningContentControl TransitionMode="Fade">
<pi:TextBoxScanner Style="{StaticResource TextBoxExtend.Multi}" hc:InfoElement.Placeholder="鼠标点击此处激活" hc:InfoElement.Title="码信息" hc:InfoElement.TitlePlacement="Top" AutoClear="NextClear" IsAutoFocus="True"></pi:TextBoxScanner>
</hc:TransitioningContentControl>
</TabItem>
</TabControl>
</TabItem>
<TabItem Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.设置},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xeb8d;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">设置</TextBlock>
</StackPanel>
</TabItem.Header>
<hc:TransitioningContentControl TransitionMode="Fade">
<View:SetView />
</hc:TransitioningContentControl>
</TabItem>
</TabControl>
<!--状态栏-->
<Border Margin="5,3" Grid.Row="2" Grid.ColumnSpan="2" Background="AliceBlue" CornerRadius="3">
<Grid>
<!--<StackPanel Margin="5" Orientation="Horizontal" HorizontalAlignment="Left">
<pi:IotState Content="WebSocket连接" IsOk="False" Height="auto" Width="auto" InteriorHeight="13" Foreground="Gray" Background="{x:Null}"></pi:IotState>
<Button Content="手动重连" ></Button>
</StackPanel>-->
<StackPanel Margin="5" Orientation="Horizontal" HorizontalAlignment="Right">
<TextBlock Margin="0,0" Text="{Binding Time,StringFormat=yyyy-MM-dd HH:mm:ss,FallbackValue=2000-01-01 00:00:00}" Foreground="#FF3A90C1" VerticalAlignment="Center"></TextBlock>
</StackPanel>
</Grid>
</Border>
<!--全局提示-->
<ScrollViewer Background="{x:Null}" Grid.Row="1" VerticalScrollBarVisibility="Auto" HorizontalAlignment="Right" VerticalAlignment="Bottom">
<StackPanel Background="{x:Null}" hc:Growl.GrowlParent="True" VerticalAlignment="Top" Margin="0,10,10,10" HorizontalAlignment="Right"/>
</ScrollViewer>
</Grid>
</hc:Window>

View File

@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
using .ViewModel;
using HandyControl.Controls;
namespace
{
/// <summary>
/// MainWindow1.xaml 的交互逻辑
/// </summary>
public partial class MXMainWindow : HandyControl.Controls.Window
{
public static MainViewModel viewModel = MainWindow.viewModel;
public MXMainWindow()
{
if (!viewModel.InitAgo())
{
this.Close();
System.Environment.Exit(0);
}
InitializeComponent();
this.DataContext = viewModel;
}
private void load(object sender, RoutedEventArgs e)
{
viewModel.Init(this);
}
private void tabControl_PreviewKeyDown(object sender, KeyEventArgs e)
{
//取消tabControl快捷键切换
if (e.Key == Key.LeftCtrl || e.Key == Key.LeftCtrl || e.Key == Key.Tab)
e.Handled = true;
}
private void Window_Closed(object sender, EventArgs e)
{
System.Environment.Exit(0);
}
}
}

View File

@ -0,0 +1,194 @@
<pi:UserControlBase
xmlns:pi="https://github.com/ping9719/wpfex"
x:Class="货架标准上位机.MXOutInventoryView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:货架标准上位机="clr-namespace:货架标准上位机"
mc:Ignorable="d"
d:DesignHeight="737" d:DesignWidth="1192">
<Border Margin="0" Background="LightGray" CornerRadius="3" Padding="0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.9*"></RowDefinition>
<RowDefinition Height="0.9*"></RowDefinition>
<RowDefinition Height="9*"></RowDefinition>
</Grid.RowDefinitions>
<Border Grid.Row="0" Margin="0" Background="AliceBlue" Padding="0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Style="{StaticResource ButtonSuccess}" hc:BorderElement.CornerRadius="15"
Grid.Column="3" MinHeight="45" FontSize="28" Content="&#xec61;开始发料" FontFamily="{StaticResource IconFont}"
Command="{Binding BtnStartCommand}"
>
</Button>
<Button Style="{StaticResource ButtonWarning}" hc:BorderElement.CornerRadius="15"
Grid.Column="4" MinHeight="45" FontSize="28" Content="&#xe61b;暂停发料" FontFamily="{StaticResource IconFont}"
Command="{Binding BtnPauseCommand}">
</Button>
</Grid>
</Border>
<Border Grid.Row="1" Margin="0" Background="LightGray" Padding="0">
<Border Margin="0" CornerRadius="3" Background="AliceBlue" Padding="0">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Button
hc:BorderElement.CornerRadius="15"
Background="Green" Foreground="White"
Grid.Column="1" MinHeight="45" FontSize="28" Content="&#xe63a; 发 料 单" FontFamily="{StaticResource IconFont}"
Command="{Binding BtnOutOrderCommand}">
</Button>
<StackPanel Grid.Column="2" VerticalAlignment="Center" Orientation="Horizontal">
<TextBlock FontSize="26" Text="发料单号:">
</TextBlock>
<TextBlock FontSize="26" Text="{Binding SelectedOutOrderNumber}">
</TextBlock>
</StackPanel>
</Grid>
</Border>
<!--</TabItem>-->
</Border>
<Border Grid.Row="2" Margin="0" Background="AliceBlue" Padding="0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="8*"></RowDefinition>
<RowDefinition Height="0.8*"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="6*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*"></RowDefinition>
<RowDefinition Height="12*"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="发料单列表" MouseDown="TextBlock_MouseDown" FontWeight="DemiBold" FontSize="24" HorizontalAlignment="Center" VerticalAlignment="Center" TextAlignment="Center"></TextBlock>
<Border CornerRadius="3" Margin="1" Grid.Row="1" Background="AliceBlue" BorderBrush="CadetBlue" BorderThickness="1.5">
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Visible">
<ListView FontSize="18" ItemsSource="{Binding OutOrderList}" SelectedItem="{Binding SelectedOutOrder,Mode=TwoWay}" PreviewMouseWheel="ListView_PreviewMouseWheel">
<ListView.View>
<GridView AllowsColumnReorder="False">
<GridView.ColumnHeaderContainerStyle>
<Style TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="Visibility" Value="Collapsed"/>
</Style>
</GridView.ColumnHeaderContainerStyle>
<GridViewColumn DisplayMemberBinding="{Binding OrderNumber}"/>
</GridView>
</ListView.View>
</ListView>
</ScrollViewer>
</Border>
</Grid>
<Border CornerRadius="3" Margin="1" Grid.Row="0" Grid.Column="1" Background="AliceBlue" BorderBrush="CadetBlue" BorderThickness="1.5">
<Grid>
<Grid.RowDefinitions>
<!--<RowDefinition Height="1*"></RowDefinition>-->
<RowDefinition Height="12*"></RowDefinition>
</Grid.RowDefinitions>
<!--<StackPanel VerticalAlignment="Center" Orientation="Horizontal" >
<TextBlock FontSize="24">
</TextBlock>
<TextBlock Text="{Binding SelectedOutOrderNumber}" FontSize="24">
</TextBlock>
</StackPanel>-->
<DataGrid Grid.Row="0"
SelectedCellsChanged="DataGrid_SelectedCellsChanged"
ItemsSource="{Binding DataGridItemSource}"
RowHeight="40"
AutoGenerateColumns="False" FontSize="15">
<DataGrid.Columns>
<DataGridTemplateColumn Header="" CanUserResize="False" Width="50">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<Ellipse Width="20" Height="20" Fill="LightGreen" Visibility="{Binding IsSended,Converter={StaticResource Boolean2VisibilityConverter}}"></Ellipse>
<Ellipse Width="20" Height="20" Fill="Gray" Visibility="{Binding IsSended,Converter={StaticResource Boolean2VisibilityReConverter}}"></Ellipse>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn IsReadOnly="True" Header="已取料" Binding="{Binding IsSended,Converter={StaticResource Boolean2StringConverter},ConverterParameter=否;是}"></DataGridTextColumn>
<DataGridTextColumn MaxWidth="100" IsReadOnly="True" Header="序号" Binding="{Binding RowNumber}"></DataGridTextColumn>
<DataGridTextColumn Header="库位" Binding="{Binding StoreCode}"></DataGridTextColumn>
<DataGridTextColumn MaxWidth="150" Header="物料编码" Binding="{Binding MatCode}"></DataGridTextColumn>
<DataGridTextColumn MaxWidth="150" Header="物料名称" Binding="{Binding MatName}"></DataGridTextColumn>
<DataGridTextColumn MaxWidth="150" Header="数量" Binding="{Binding MatQty}"></DataGridTextColumn>
<DataGridTextColumn MaxWidth="150" Header="规格" Binding="{Binding MatSpec}"></DataGridTextColumn>
<DataGridTextColumn MaxWidth="150" Header="批次" Binding="{Binding MatBatch}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="False" Header="物料SN" Binding="{Binding MatSN}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Border>
<Grid Grid.Row="2" Grid.ColumnSpan="2">
<Border CornerRadius="3" Background="Transparent" VerticalAlignment="Center" >
<Grid HorizontalAlignment="Stretch" Margin="5 0 1 0" VerticalAlignment="Top" Width="Auto" Height="40">
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5*"></ColumnDefinition>
<ColumnDefinition Width="5*"></ColumnDefinition>
<ColumnDefinition Width="5*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="1">
<TextBlock Text="当前状态:" FontSize="22">
</TextBlock>
<TextBlock Text="{Binding OrderStatus,FallbackValue=未知}" Foreground="Red" FontSize="22"></TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="2">
<TextBlock Text="总盘数:" VerticalAlignment="Bottom" FontSize="22">
</TextBlock>
<TextBlock Text="{Binding TotalPan}" VerticalAlignment="Bottom" FontSize="22">
</TextBlock>
<TextBlock Text=" 取料进度:" VerticalAlignment="Bottom" FontSize="22">
</TextBlock>
<TextBlock Text="{Binding SendedPan}" VerticalAlignment="Bottom" FontSize="22">
</TextBlock>
<TextBlock Text="/" VerticalAlignment="Bottom" FontSize="22">
</TextBlock>
<TextBlock Text="{Binding TotalPan}" VerticalAlignment="Bottom" FontSize="22">
</TextBlock>
</StackPanel>
</Grid>
</Border>
</Grid>
</Grid>
</Border>
</Grid>
</Border>
</pi:UserControlBase>

View File

@ -0,0 +1,69 @@
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 MXOutInventoryView : UserControlBase
{
public static MXOutInventoryViewModel viewModel = new MXOutInventoryViewModel();
public MXOutInventoryView()
{
InitializeComponent();
this.DataContext = viewModel;
}
private void DataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{
try
{
var viewModel = this.DataContext as InInventoryViewModel;
DataGrid datagrid = sender as DataGrid;
var index = datagrid.SelectedIndex;
if (index >= 0)
{
}
datagrid.UnselectAllCells();
}
catch
{
}
}
private void ListView_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
if (!e.Handled)
{
// ListView拦截鼠标滚轮事件
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);
}
}
private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
{
viewModel.RefreshOutOrderList(viewModel.SelectedOutOrderNumber);
}
}
}

View File

@ -0,0 +1,80 @@
<hc:Window x:Class="货架标准上位机.MXOutOrderDetailView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:hc="https://handyorg.github.io/handycontrol"
Height="480" Width="800" WindowStyle="None" Background="{x:Null}" BorderThickness="0" AllowsTransparency="True" WindowStartupLocation="CenterScreen" Opacity="1">
<hc:Window.Resources>
<ResourceDictionary>
<Style TargetType="Button" BasedOn="{StaticResource ButtonDefault}">
<Setter Property="Padding" Value="25,0"></Setter>
</Style>
</ResourceDictionary>
</hc:Window.Resources>
<Border Background="AliceBlue" CornerRadius="10" BorderThickness="1.5" BorderBrush="RosyBrown" >
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1.5*"></RowDefinition>
<RowDefinition Height="1.5*"></RowDefinition>
<RowDefinition Height="10*"></RowDefinition>
<RowDefinition Height="0.8*"></RowDefinition>
<RowDefinition Height="1.5*"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock FontSize="25" Name="Title" Text="发 料 明 细" TextWrapping="Wrap" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<Button Margin="-5,-1" Visibility="{Binding IsClose,Converter={StaticResource Boolean2VisibilityConverter}}" Style="{StaticResource ButtonIcon}" hc:IconElement.Geometry="{StaticResource CloseGeometry}" HorizontalAlignment="Right" VerticalAlignment="Top" Click="closeClick"/>
<StackPanel Grid.Row="1" Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock FontSize="23" Text="当前发料单号:"></TextBlock>
<TextBlock FontSize="23" Text="{Binding BillNumber}"></TextBlock>
</StackPanel>
<Grid Margin="5,0" Grid.Row="2" >
<DataGrid Grid.Row="1" SelectedCellsChanged="DataGrid_SelectedCellsChanged"
RowHeight="39" ItemsSource="{Binding DataGridItemSource}"
AutoGenerateColumns="False" Name="dg1" FontSize="13">
<DataGrid.Columns>
<DataGridTemplateColumn CanUserResize="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Width="30" Height="30"
Checked="CheckBox_Checked"
Unchecked="CheckBox_Checked"
IsChecked="{Binding IsSelected , UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<CheckBox Width="30" Height="30" IsChecked="True" Unchecked="allChecked_Unchecked" Checked="allChecked_Checked" Name="allChecked"/>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn IsReadOnly="True" Header="物料编码" Binding="{Binding MatCode}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="数量" Binding="{Binding MatQty}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="物料名称" Binding="{Binding MatName}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="规格" Binding="{Binding MatSpec}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="批次" Binding="{Binding MatBatch}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="最小包装条码" Binding="{Binding MatSN}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="库位" Binding="{Binding StoreCode}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="入库时间" Binding="{Binding InstoreTime}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
<StackPanel Grid.Row="3" HorizontalAlignment="Right" Orientation="Horizontal" >
<TextBlock FontSize="20" Text="料盘数:"></TextBlock>
<TextBlock FontSize="20" Name="selectedPan" Text="{Binding SelectedPan}"></TextBlock>
<TextBlock FontSize="20" Text=" 已勾选数量:"></TextBlock>
<TextBlock FontSize="20" Name="selectedCount" Text="{Binding SelectedCount}"></TextBlock>
</StackPanel>
<StackPanel Margin="3" x:Name="spacingPanel" Grid.Row="4" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<Button Margin="0" Content="确 认" Background="RosyBrown" Foreground="White" MinHeight="40" FontSize="21" Click="comfirmClick"/>
<TextBlock Margin="20" Text=""></TextBlock>
<Button Margin="0" Content="取 消" Background="CadetBlue" Foreground="White" MinHeight="40" FontSize="21" Click="closeClick"/>
</StackPanel>
</Grid>
</Border>
</hc:Window>

View File

@ -0,0 +1,158 @@
using HandyControl.Controls;
using HandyControl.Data;
using HandyControl.Tools.Extension;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Media;
using System.Runtime.CompilerServices;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using WCS.Model;
using WCS.Model.ApiModel.MatInventoryDetail;
using .Api;
using .ViewModel;
using .Views.Controls;
namespace
{
public partial class MXOutOrderDetailView : HandyControl.Controls.Window
{
public MXOutOrderDetailViewViewModel viewModel;
/// <summary>
///
/// </summary>
/// <param name="billNumber"></param>
/// <param name="warehouseCode"></param>
/// <param name="orderProdNumbers"></param>
/// <param name="orderWorkNumbers"></param>
/// <param name="isFirstSend">是否是首盘发料</param>
public MXOutOrderDetailView(string billNumber, string warehouseCode
, string orderProdNumbers, string orderWorkNumbers, int isFirstSend = 0, string reportSide = null
)
{
InitializeComponent();
viewModel = new MXOutOrderDetailViewViewModel(billNumber, warehouseCode, orderProdNumbers, orderWorkNumbers, isFirstSend, reportSide);
this.DataContext = viewModel;
}
private void closeClick(object sender, RoutedEventArgs e)
{
this.DialogResult = false;
this.Close();
}
private void DataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{
DataGrid datagrid = sender as DataGrid;
var index = datagrid.SelectedIndex;
if (index >= 0)
{
if (viewModel.DataGridItemSource != null && viewModel.DataGridItemSource.Count() > index)
{
var data = viewModel.DataGridItemSource.ElementAt(index);
data.IsSelected = !data.IsSelected;
viewModel.DataGridItemSource = viewModel.DataGridItemSource.ToList();
}
}
datagrid.UnselectAllCells();
}
private void txtMatQty1_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
if (!Regex.IsMatch(e.Text, "^[0-9]"))
{
e.Handled = true;
}
}
public List<MatInventoryDetailModel> DataGridItemSource = new List<MatInventoryDetailModel>();
private void comfirmClick(object sender, RoutedEventArgs e)
{
this.DialogResult = true;
if (viewModel.DataGridItemSource != null)
{
DataGridItemSource = viewModel.DataGridItemSource.Where(t => t.IsSelected).ToList();
if (DataGridItemSource != null && DataGridItemSource.Count > 0)
{
var dia = Dialog.Show(new TextDialog());
try
{
#region
var body1 = new SysOutOrderByMatSnRequest()
{
OrderNumber = viewModel.BillNumber,
OrderType = "出库",
OrderSource = "WCS前端",
SnList = DataGridItemSource.Select(t => t.MatSN).ToList(),
DeviceType = LocalFile.Config.DeviceType,
UserName = LocalStatic.CurrentUser
};
var Result1 = ApiHelp.GetDataFromHttp<ResponseCommon>(LocalFile.Config.ApiIpHost + "outstore/sysOutOrderByMatSn", body1, "POST");
if (Result1 != null && Result1.Code == 200)
{
//出库单据保存成功 刷新左侧出库单列表
MXOutInventoryView.viewModel.RefreshOutOrderList(viewModel.BillNumber);
Growl.Success("出库单据保存成功,请点击【开始发料】进行发料!");
}
else if (Result1 != null)
{
Growl.Warning(Result1.Message);
}
#endregion
}
catch (Exception ex)
{
Growl.Error("保存出库单据失败:" + ex.Message);
}
finally
{
App.Current.Dispatcher.Invoke(() =>
{
dia.Close();
dia.Collapse();
});
}
}
this.Close();
}
else
this.Close();
}
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
viewModel.RefreshCount();
}
private void allChecked_Checked(object sender, RoutedEventArgs e)
{
if (viewModel != null && viewModel.DataGridItemSource != null && viewModel.DataGridItemSource.Count() > 0)
{
foreach (var item in viewModel.DataGridItemSource)
{
item.IsSelected = true;
}
viewModel.DataGridItemSource = viewModel.DataGridItemSource.ToList();
}
}
private void allChecked_Unchecked(object sender, RoutedEventArgs e)
{
if (viewModel != null && viewModel.DataGridItemSource != null && viewModel.DataGridItemSource.Count() > 0)
{
foreach (var item in viewModel.DataGridItemSource)
{
item.IsSelected = false;
}
viewModel.DataGridItemSource = viewModel.DataGridItemSource.ToList();
}
}
}
}

View File

@ -0,0 +1,123 @@
<hc:Window x:Class="货架标准上位机.MXOutOrderView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:hc="https://handyorg.github.io/handycontrol"
Height="500" Width="900" WindowStyle="None" BorderThickness="0" Background="{x:Null}" AllowsTransparency="True" WindowStartupLocation="CenterScreen" Opacity="1">
<hc:Window.Resources>
<ResourceDictionary>
<Style TargetType="Button" BasedOn="{StaticResource ButtonDefault}">
<Setter Property="Padding" Value="25,0"></Setter>
</Style>
</ResourceDictionary>
</hc:Window.Resources>
<Border BorderThickness="1.5" BorderBrush="Black" Background="AliceBlue" CornerRadius="10" >
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1.5*"></RowDefinition>
<RowDefinition Height="1.5*"></RowDefinition>
<RowDefinition Height="9*"></RowDefinition>
<RowDefinition Height="1.5*"></RowDefinition>
<RowDefinition Height="1.5*"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock FontSize="25" Name="Title" Text="选 择 发 料 单" TextWrapping="Wrap" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<Button Margin="-5,-1" Visibility="{Binding IsClose,Converter={StaticResource Boolean2VisibilityConverter}}" Style="{StaticResource ButtonIcon}" hc:IconElement.Geometry="{StaticResource CloseGeometry}" HorizontalAlignment="Right" VerticalAlignment="Top" Click="closeClick"/>
<Border Grid.Row="1" Margin="2 2 2 0" Background="LightGray" Padding="0">
<Border Background="AliceBlue" Padding="0">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.8*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="0.8*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Grid.Row="5" Grid.Column="0" Margin="2" FontSize="20" HorizontalAlignment="Right" VerticalAlignment="Center" Text="订单号:">
</TextBlock>
<TextBox MinWidth="120" Grid.Column="1" MaxWidth="120" Text="{Binding OrderProdNumber}" FontSize="20" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Black" ></TextBox>
<TextBlock Grid.Column="2" Margin="10 2 2 2" FontSize="20" HorizontalAlignment="Right" VerticalAlignment="Center" Text="工单号:">
</TextBlock>
<TextBox Grid.Column="3" MinWidth="120" MaxWidth="120" Text="{Binding OrderWorkNumber}" PreviewTextInput="txtMatQty1_PreviewTextInput" Name="txtMatQty1" FontSize="20" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Black" >
</TextBox>
<TextBlock Grid.Column="4" Margin="10 2 2 2" FontSize="20" HorizontalAlignment="Right" VerticalAlignment="Center" Text="领料单号:">
</TextBlock>
<TextBox Grid.Column="5" MinWidth="120" MaxWidth="120" Text="{Binding PickBillNumber}" PreviewTextInput="txtMatQty1_PreviewTextInput" FontSize="20" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Black" >
</TextBox>
<Button Grid.Column="6" Style="{StaticResource ButtonSuccess}"
Command="{Binding BtnSearchCommand}"
hc:BorderElement.CornerRadius="10"
MinHeight="35" FontSize="20" Content="&#xE8B9; 搜索" FontFamily="{StaticResource IconFont}" />
<!--</StackPanel>-->
</Grid>
</Border>
<!--</TabItem>-->
</Border>
<Grid Margin="5,0" Grid.Row="2" >
<DataGrid Grid.Row="1" SelectedCellsChanged="DataGrid_SelectedCellsChanged"
RowHeight="39" ItemsSource="{Binding DataGridItemSource}"
AutoGenerateColumns="False" Name="dg1" FontSize="13">
<DataGrid.Columns>
<DataGridTemplateColumn CanUserResize="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<RadioButton Width="30" Height="30"
GroupName="111222333"
IsChecked="{Binding IsSelected , UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn IsReadOnly="True" Header="订单号" Binding="{Binding orderProdNumbers}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="工单号" Binding="{Binding orderWorkNumbers}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="领料单号" Binding="{Binding pickBillNumber}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="类型" Binding="{Binding dictTypeStr}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="状态" Binding="{Binding dictStatusStr}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="创建时间" Binding="{Binding createdDt}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="创建人" Binding="{Binding createdBy}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
<StackPanel Grid.Row="3" VerticalAlignment="Center" HorizontalAlignment="Left" Orientation="Horizontal">
<TextBlock Margin="3" Text="仓库代码:" VerticalAlignment="Center" FontSize="26"></TextBlock>
<TextBox Margin="3" Name="txtWarehouseCode" FontSize="26" MinWidth="120" MaxWidth="120" Text="{Binding WarehouseCode}"></TextBox>
</StackPanel>
<StackPanel Margin="3" x:Name="spacingPanel" Grid.Row="4" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<Button Margin="0" Content="全部发料" Background="ForestGreen" Foreground="White" MinHeight="40" FontSize="21" Click="comfirmClick">
</Button>
<TextBlock Margin="13 0 0 0" VerticalAlignment="Center" FontSize="20" Text=" AB面选择"></TextBlock>
<ComboBox Name="reportSideCbx">
<ComboBoxItem></ComboBoxItem>
<ComboBoxItem>A</ComboBoxItem>
<ComboBoxItem>B</ComboBoxItem>
</ComboBox>
<Button Margin="0" Content="首盘发料" Background="RosyBrown" Foreground="White" MinHeight="40" FontSize="21" Click="comfirmClick">
</Button>
<Button Margin="0" Content="后续料" Background="RoyalBlue" Foreground="White" MinHeight="40" FontSize="21" Click="comfirmClick">
</Button>
<TextBlock Margin="13" Text=""></TextBlock>
<Button Margin="0" Content="取消" Background="CadetBlue" Foreground="White" MinHeight="40" FontSize="21" Click="closeClick"/>
</StackPanel>
</Grid>
</Border>
</hc:Window>

View File

@ -0,0 +1,156 @@
using HandyControl.Controls;
using HandyControl.Data;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics.Eventing.Reader;
using System.Linq;
using System.Media;
using System.Runtime.CompilerServices;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using TouchSocket.Core;
using WCS.Model.ApiModel.MatInventoryDetail;
using WCS.Model.ApiModel.MXBackgroundThread;
using .ViewModel;
namespace
{
public partial class MXOutOrderView : HandyControl.Controls.Window
{
public MXOutOrderViewModel viewModel = new MXOutOrderViewModel();
public MXOutOrderView()
{
InitializeComponent();
this.DataContext = viewModel;
}
private void closeClick(object sender, RoutedEventArgs e)
{
this.DialogResult = false;
this.Close();
}
int index = 0;
private void DataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{
System.Windows.Controls.DataGrid datagrid = sender as System.Windows.Controls.DataGrid;
index = datagrid.SelectedIndex;
if (index >= 0)
{
if (viewModel.DataGridItemSource != null && viewModel.DataGridItemSource.Count() > index)
{
var data = viewModel.DataGridItemSource.ElementAt(index);
try
{
var current = viewModel.DataGridItemSource.Where(t => t.IsSelected).First();
current.IsSelected = false;
}
catch { }
data.IsSelected = true;
viewModel.DataGridItemSource = viewModel.DataGridItemSource.ToList();
}
}
//datagrid.UnselectAllCells();
}
private void txtMatQty1_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
if (!Regex.IsMatch(e.Text, "^[0-9]"))
{
e.Handled = true;
}
}
public PickOrder SelectedOrder { get; set; }
public List<MatInventoryDetailModel> inventoryDetails { get; set; }
private void comfirmClick(object sender, RoutedEventArgs e)
{
var isFirstSend = 0;
try
{
var button = sender as System.Windows.Controls.Button;
if (button != null)
{
if (button.Content.Equals("首盘发料"))
isFirstSend = 1;
else if (button.Content.Equals("全部发料"))
isFirstSend = 0;
else
isFirstSend = 2;
}
else
{
Logs.Write("button获取失败了");
}
}
catch (Exception ex)
{
}
if (viewModel.DataGridItemSource == null)
{
Growl.Warning("请搜索并选择领料单后进行确认!");
return;
}
SelectedOrder = viewModel.DataGridItemSource.Where(t => t.IsSelected).FirstOrDefault();
if (SelectedOrder == null)
{
Growl.Warning("请选择领料单后进行确认!");
return;
}
if (SelectedOrder.pickBillNumber.Contains("SCLL"))
{
if (string.IsNullOrEmpty(viewModel.WarehouseCode))
{
Growl.Warning("请输入仓库代码!");
txtWarehouseCode.Focus();
return;
}
}
else
{
if (!string.IsNullOrEmpty(viewModel.WarehouseCode))
{
Growl.Warning("非生产领料无需输入仓库代码!");
txtWarehouseCode.Focus();
return;
}
viewModel.WarehouseCode = string.Empty;
}
this.Hide();
var detailWindow = new MXOutOrderDetailView(SelectedOrder.pickBillNumber, viewModel.WarehouseCode
, SelectedOrder.orderProdNumbers, SelectedOrder.orderWorkNumbers, isFirstSend, reportSideCbx.Text
);
System.Windows.Interop.WindowInteropHelper mainUI = new System.Windows.Interop.WindowInteropHelper(detailWindow);
mainUI.Owner = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;
detailWindow.ShowDialog();
if (detailWindow.DialogResult == true && detailWindow.DataGridItemSource != null && detailWindow.DataGridItemSource.Count > 0)
{
inventoryDetails = detailWindow.DataGridItemSource;
//LocalStatic.CurrentPickBillNumber = SelectedOrder.pickBillNumber;
this.Close();
}
else
this.ShowDialog();
}
}
}

View File

@ -27,7 +27,10 @@ namespace 货架标准上位机
public MainWindow()
{
if (!viewModel.InitAgo())
{
this.Close();
System.Environment.Exit(0);
}
InitializeComponent();

View File

@ -8,6 +8,7 @@
xmlns:pi="https://github.com/ping9719/wpfex"
xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes"
mc:Ignorable="d"
Closed="Window_Closed"
Title="{Binding Title}" NonClientAreaBackground="#FFDCEEFF" Height="800" Width="1280" Icon="/Resources/Logo.ico"
Background="#FFDCEEFF" WindowStartupLocation="CenterScreen" Loaded="load">
<!--标题栏-->

View File

@ -29,8 +29,10 @@ namespace 货架标准上位机
public MainWindow1()
{
if (!viewModel.InitAgo())
{
this.Close();
System.Environment.Exit(0);
}
InitializeComponent();
this.DataContext = viewModel;
}
@ -46,5 +48,10 @@ namespace 货架标准上位机
if (e.Key == Key.LeftCtrl || e.Key == Key.LeftCtrl || e.Key == Key.Tab)
e.Handled = true;
}
private void Window_Closed(object sender, EventArgs e)
{
System.Environment.Exit(0);
}
}
}

View File

@ -90,7 +90,7 @@
<DataGridTextColumn IsReadOnly="True" Header="R" Binding="{Binding R}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="C" Binding="{Binding C}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="是否启用" Binding="{Binding IsEnable,Converter={StaticResource Boolean2StringConverter},ConverterParameter=否;是}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="绑定后货架编码" Binding="{Binding BindShelfCode}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="绑定后货架编码" Binding="{Binding BigShelfCode}"></DataGridTextColumn>
<DataGridTemplateColumn CanUserResize="False" Width="auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>

View File

@ -121,9 +121,9 @@
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="绑定后货架编码:" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<TextBox Name="txtBindShelfCode" MinWidth="150" MaxWidth="150" Grid.Row="0" Grid.Column="1" FontSize="15"
<TextBox Name="txtBigShelfCode" MinWidth="150" MaxWidth="150" Grid.Row="0" Grid.Column="1" FontSize="15"
VerticalAlignment="Center" HorizontalAlignment="Stretch"
Text="{Binding BindShelfCode}"
Text="{Binding BigShelfCode}"
Style="{StaticResource TextBoxExtend}">
</TextBox>
</StackPanel>

View File

@ -69,10 +69,10 @@ namespace 货架标准上位机
txtGroupName.Focus();
return;
}
if (ViewModel.IsBind && string.IsNullOrEmpty(ViewModel.BindShelfCode))
if (ViewModel.IsBind && string.IsNullOrEmpty(ViewModel.BigShelfCode))
{
Growl.Warning("需要绑定的货架需要输入绑定后货架编码!");
txtBindShelfCode.Focus();
txtBigShelfCode.Focus();
return;
}
#endregion

View File

@ -120,7 +120,7 @@
<DataGridTextColumn IsReadOnly="True" Header="TCP连接信息" Binding="{Binding ClientIp}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="货架区域(组别)" Binding="{Binding GroupName}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="是否绑定" Binding="{Binding IsBind,Converter={StaticResource Boolean2StringConverter},ConverterParameter=否;是}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="绑定后货架编码" Binding="{Binding BindShelfCode}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="绑定后货架编码" Binding="{Binding BigShelfCode}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>

View File

@ -30,6 +30,7 @@
AutoGenerateColumns="False" Name="dg1" FontSize="13">
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True" Header="序号" Binding="{Binding RowNumber}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="已盘点" Binding="{Binding IsStocktaking,Converter={StaticResource Boolean2StringConverter},ConverterParameter=否;是}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="盘点单据编码" Binding="{Binding StocktakingOrderNumber}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="库位" Binding="{Binding StoreCode}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="物料编码" Binding="{Binding MatCode}"></DataGridTextColumn>
@ -37,7 +38,6 @@
<DataGridTextColumn IsReadOnly="True" Header="物料规格" Binding="{Binding MatSpec}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="物料批次" Binding="{Binding MatBatch}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="数量" Binding="{Binding MatQty}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="是否盘点" Binding="{Binding IsStocktaking}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="盘点数量" Binding="{Binding StocktakingQty}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="物料SN" Binding="{Binding MatSN}"></DataGridTextColumn>
</DataGrid.Columns>

View File

@ -114,6 +114,8 @@ namespace 货架标准上位机
{
Guid = _warning.Guid,
SolveType = clikename == "确认" ? SolveTypeEnum. : SolveTypeEnum.,
UserName = LocalStatic.CurrentUser,
DeviceType = "WCS前端",
};
var Result = ApiHelp.GetDataFromHttp<ResponseCommon<object>>(LocalFile.Config.ApiIpHost + "warning/solveWarning", body, "POST");
if (Result != null && Result.Code == 200)

View File

@ -3,8 +3,10 @@ using Newtonsoft.Json;
using Ping9719.WpfEx;
using System;
using System.Collections.Generic;
using System.Diagnostics.Eventing.Reader;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using TouchSocket.Core;
@ -30,12 +32,33 @@ namespace 货架标准上位机
{
a.Add<WebSocketClientPlugin>();
//配置心跳
a.UseWebSocketHeartbeat()//使用心跳插件
.SetTick(TimeSpan.FromSeconds(5));//每5秒ping一次。
//a.UseWebSocketHeartbeat()//使用心跳插件
// .SetTick(TimeSpan.FromSeconds(5));//每5秒ping一次。
//配置断线重连
a.UseReconnection(-1, true, 1000);//-1表示一直重连
}));
client.Connect();
//自定义实现心跳和重连
Task.Run(async () =>
{
while (true)
{
await Task.Delay(4000);
try
{
WebSocket.client.Ping();
await Task.Delay(200);
if (WebSocket.client.LastReceivedTime < DateTime.Now.AddSeconds(-10))
{
WebSocket.client.TryConnect();
}
}
catch (Exception ex)
{
}
}
});
}
}
public class WebSocketClientPlugin : PluginBase, IWebSocketReceivedPlugin
@ -75,7 +98,10 @@ namespace 货架标准上位机
switch (warning.WarningType)
{
case WarningTypeEnum.:
OutVentoryView.viewModel.RefreshDataGridItemSource();
if (LocalFile.Config.IsMx)
MXOutInventoryView.viewModel.RefreshDataGridItemSource();
else
OutVentoryView.viewModel.RefreshDataGridItemSource();
client.Send(e.DataFrame.ToText());
break;
case WarningTypeEnum.:
@ -97,7 +123,6 @@ namespace 货架标准上位机
}
else
{
Application.Current.Dispatcher.Invoke(() =>
{
WarningManager.AddWarning(warning);

View File

@ -2,11 +2,11 @@
//连接不上加SslMode=none;
"MySql": "server=localhost;Database=db1;Uid=root;Pwd=123456;Convert Zero Datetime=True",
//货架服务器的IP和端口号
"ApiIpHost": "http://127.0.0.1:8888/",
"ApiIpHost": "http://192.168.5.84:8888/",
//WebSocket的地址
"WebSocketUrl": "ws://127.0.0.1:7789/ws",
"WebSocketUrl": "ws://192.168.5.84:7789/ws",
//货架分区
"GroupName": [ "13寸智能货架", "7寸智能货架" ],
"GroupName": [ "C0"],
//设备类型 可以配置为每个电脑不一样
"DeviceType": "WCS前端",
//货架类型的是否开机自检
@ -15,6 +15,16 @@
"ScannerComList": [],
//串口扫码枪延时
"ScannerTimeOut": 2000,
//盟讯公司配置-是否是盟讯
"IsMX": true,
//盟讯公司配置-获取要料单
"GetPickOrderUrl": "http://192.168.2.23:9289/integrate/inOut/missPickListR",
//盟讯公司配置-获取要料明细接口
"RecommendedBarCode": "http://192.168.2.23:9289/integrate/inOut/recommendedBarCode",
//盟讯公司配置-首盘发料获取要料单明细
"FirstSendRecommendedBarCode": "http://192.168.2.23:9213/integrate/inOut/firstsetPush",
//盟讯公司配置-后续发料获取要料单明细
"ElectronicSiloPush": "http://192.168.2.23:9213/integrate/inOut/electronicSiloPush",
//系统配置
"Sys": {
//是否保存登录历史

View File

@ -30,6 +30,7 @@
<ItemGroup>
<None Remove="Fonts\iconfont.ttf" />
<None Remove="Resources\cloud.png" />
<None Remove="Resources\goOutInstore.png" />
<None Remove="Resources\Logo.ico" />
<None Remove="Resources\Logo.png" />
<None Remove="Resources\LogoAll.zip" />
@ -73,6 +74,9 @@
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Resource>
<Resource Include="Resources\cloud.png" />
<Resource Include="Resources\goOutInstore.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Resource>
<Resource Include="Resources\Logo.ico" />
<Resource Include="Resources\Logo.png" />
<Resource Include="Resources\主页.png" />