master
1 year ago
parent 45f18cfc36
commit 7be8a25476

@ -133,7 +133,8 @@ namespace Khd.Core.Domain.Models
/// </summary>
[Column("remark")]
public string remark { get; set; }
[Column("is_out")]
public int? IsOut { get; set; }
}
}

@ -771,26 +771,26 @@ namespace Khd.Core.Wcs.Wcs
nextPointNo = agvEquip.equipNo,
materialBarcode = wmsProductInstock.productBatch,
};
WmsProductInstockDetail wmsProductInstockDetail = new WmsProductInstockDetail()
{
erpAmount = 0,
productId = wmsProductInstock.productId,
executeStatus = "1",
productInstockDetailId = StaticData.SnowId.NextId(),
instockAmount = 1,
instockBy = "WCS",
instockDate = DateTime.Now,
instockWay = "2",
locationCode = wmsBaseLocation.locationCode,
planAmount = 1,
productBarcode = wmsProductInstock.productBatch,
productBatch = wmsProductInstock.productBatch,
productInstockId = wmsProductInstock.productInstockId,
};
//WmsProductInstockDetail wmsProductInstockDetail = new WmsProductInstockDetail()
//{
// erpAmount = 0,
// productId = wmsProductInstock.productId,
// executeStatus = "1",
// productInstockDetailId = StaticData.SnowId.NextId(),
// instockAmount = 1,
// instockBy = "WCS",
// instockDate = DateTime.Now,
// instockWay = "2",
// locationCode = wmsBaseLocation.locationCode,
// planAmount = 1,
// productBarcode = wmsProductInstock.productBatch,
// productBatch = wmsProductInstock.productBatch,
// productInstockId = wmsProductInstock.productInstockId,
//};
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
wmsProductInstock.executeStatus = "1";
wmsBaseLocation.locationStatus = "2";
dbContext.Add(wmsProductInstockDetail);
//dbContext.Add(wmsProductInstockDetail);
dbContext.Update(wmsProductInstock);
dbContext.Update(wmsBaseLocation);
dbContext.Add(wcsTask);
@ -1821,7 +1821,7 @@ namespace Khd.Core.Wcs.Wcs
if (endEquip.equipType == 10)//CTU出库到装配区
{
BaseEquip endStationCodeEquip = dbContext.BaseEquip.First(t => t.objid == 10);
if (!string.IsNullOrEmpty(endStationCodeEquip.endStationCode))
if (!string.IsNullOrEmpty(endStationCodeEquip.endStationCode) && endStationCodeEquip.IsOut == 1)
{
if (item.endStationCode != endStationCodeEquip.endStationCode)
{
@ -1981,6 +1981,7 @@ namespace Khd.Core.Wcs.Wcs
}
if (CreateSuccess)
{
endStationCodeEquip.IsOut = 0;
foreach (var orderItem in orderList)
{
if (orderItem.beginTime == null)

@ -567,9 +567,9 @@ namespace Khd.Core.Wcs.Wcs
.FirstOrDefault();
if (mesBasePalletInfo != null && wmsProductInstock != null)
{
WmsProductInstockDetail? wmsProductInstockDetail = dbContext.WmsProductInstockDetail.Where(t => t.productInstockId == wmsProductInstock.productInstockId).FirstOrDefault();
if (wmsProductInstockDetail != null)
{
//WmsProductInstockDetail? wmsProductInstockDetail = dbContext.WmsProductInstockDetail.Where(t => t.productInstockId == wmsProductInstock.productInstockId).FirstOrDefault();
//if (wmsProductInstockDetail != null)
//{
wmsProductInstock.executeStatus = "2";
wmsProductInstock.endTime = DateTime.Now;
dbContext.Update(wmsProductInstock);
@ -599,17 +599,17 @@ namespace Khd.Core.Wcs.Wcs
warehouseId = 512
};
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
wmsProductInstockDetail.executeStatus = "2";
wmsProductInstockDetail.instockDate = DateTime.Now;
//wmsProductInstockDetail.executeStatus = "2";
//wmsProductInstockDetail.instockDate = DateTime.Now;
startEquip.emptyCount = 0;
dbContext.Update(wmsProductInstockDetail);
//dbContext.Update(wmsProductInstockDetail);
dbContext.Update(startEquip);
dbContext.Add(wmsProductStock);
dbContext.Update(wmsBaseLocation);
dbContext.WcsTask.Remove(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
dbContext.SaveChanges();
}
//}
}
}

@ -126,6 +126,35 @@ namespace Khd.Core.Wcs.Wcs
{
BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == item.nextPointId);
if (!string.IsNullOrEmpty(item.taskCode) && !string.IsNullOrEmpty(agvEquip.serverIp))
{
if(item.endPointId== 11)
{
dbContext.WcsTask.Remove(item);
if (item.taskStatus == 6)
{
dbContext.SaveChanges();
}
else
{
var cancelTask = new
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = item.taskCode
};
string reponse = HttpHelper.SendPostMessage(agvEquip.serverIp, agvEquip.serverPort.Value, "rcms/services/rest/hikRpcService/cancelTask", cancelTask.ToJsonString());
var result = JsonConvert.DeserializeObject<ReponseMessage>(reponse);
if (result != null && result.code == "0")
{
dbContext.SaveChanges();
_logger.Info($"任务{item.taskCode}已删除");
}
else
{
_logger.Error($"任务{item.taskCode}删除失败,原因:{result?.message}");
}
}
}
else
{
dbContext.WcsTask.Remove(item);
var cancelTask = new
@ -145,6 +174,7 @@ namespace Khd.Core.Wcs.Wcs
_logger.Error($"任务{item.taskCode}删除失败,原因:{result?.message}");
}
}
}
else
{
dbContext.WcsTask.Remove(item);

@ -27,7 +27,6 @@ namespace Khd.Core.Wpf
.Build();
SystemData.PlcConfigs = configuration.GetSection("PlcConfigs").Get<List<PlcConfig>>();
ConnectionStrings.ConnectionString = configuration["ConnectionStrings:DefaultConnection"].ToString();
////配置文件 加载 Thrift 推送端口
//ThriftConfig.ThriftIpAddress = configuration["ThriftConfig:ThriftIpAddress"].ToString();

@ -1745,7 +1745,7 @@
<hc:Pagination x:Name="Pagination2" Grid.Row="2" MaxWidth="1500" MaxPageCount="1" Margin="0,0,0,15" PageUpdated="Pagination2_PageUpdated" IsJumpEnabled="True" HorizontalAlignment="Center" Width="339" />
</Grid>
</TabItem>
<TabItem Visibility="Collapsed" x:Name="InventoryManager" Header="盘库任务" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" Background="#213269" VerticalContentAlignment="Center" Foreground="White" Width="160" Height="100" Margin="5">
<TabItem x:Name="InventoryManager" Header="盘库任务" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" Background="#213269" VerticalContentAlignment="Center" Foreground="White" Width="160" Height="100" Margin="5">
<Grid Height="1100" Width="1700">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
@ -1754,6 +1754,7 @@
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal">
<Button Content="搜索" Background="#346DFF" Foreground="White" FontSize="25" Height="50" Width="100" Margin="20,0,0,0" Click="SelectInventoryButton_Click"/>
<Button Content="添加盘库任务" Background="#346DFF" Foreground="White" FontSize="25" Height="50" Width="200" Margin="20,0,0,0" Click="SelectInventoryButton_Click"/>
<Button Content="库存盘点" Background="#346DFF" Foreground="White" FontSize="25" Height="50" Width="150" Margin="20,0,0,0" Click="InventoryTaskButton_Click"/>
</StackPanel>
<DataGrid
@ -2120,7 +2121,8 @@
<Image Source="..\Resources\cancel.png"/>
</Button>
</Grid>
<Button Content="选择出库" Background="#346DFF" Grid.ColumnSpan="6" Grid.Row="1" Foreground="White" FontSize="50" Margin="150,0,0,0" Height="100" Width="300" Click="SelectOutBtn_Click"/>
<Button Content="选择出库" Background="#346DFF" Grid.ColumnSpan="6" Grid.Row="1" Foreground="White" FontSize="50" Margin="20,0,0,0" Height="100" Width="250" Click="SelectOutBtn_Click"/>
<Button Content="继续出库" Background="#346DFF" Grid.ColumnSpan="6" Grid.Row="1" Foreground="White" FontSize="50" Margin="20,0,0,0" Height="100" Width="250" Click="ContineOutBtn_Click"/>
</StackPanel>
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Grid.Row="3" Grid.ColumnSpan="6">
<TextBlock Text="扫描条码号:" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="75"/>

@ -25,11 +25,11 @@ using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Z.EntityFramework.Plus;
using System.Windows.Threading;
using System.Windows.Input;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Threading;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wpf.Form
{
@ -106,6 +106,8 @@ namespace Khd.Core.Wpf.Form
private void FormBoard_Loaded(object sender, RoutedEventArgs e)
{
try
{
Task.Run(() =>
{
foreach (var plcConfig in SystemData.PlcConfigs)
{
@ -124,6 +126,9 @@ namespace Khd.Core.Wpf.Form
SystemData.PlcDic.TryAdd(plcConfig.Code, plc);
}
};
});
GetMenu();
DispatcherTimer dispatcherTimer = new DispatcherTimer();
@ -195,7 +200,7 @@ namespace Khd.Core.Wpf.Form
}
catch (Exception ex)
{
MessageBox.Show("条码枪连接失败");
HandyControl.Controls.MessageBox.Error("条码枪连接失败");
}
@ -229,7 +234,7 @@ namespace Khd.Core.Wpf.Form
// //plc.Open();
// //if (!plc.IsConnected)
// //{
// // MessageBox.Show("PLC连接失败,重新连接");
// // HandyControl.Controls.MessageBox.Show("PLC连接失败,重新连接");
// //}
// //else
// //{
@ -262,7 +267,7 @@ namespace Khd.Core.Wpf.Form
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
HandyControl.Controls.MessageBox.Error(ex.Message);
}
}
@ -498,7 +503,7 @@ namespace Khd.Core.Wpf.Form
/// <param name="e"></param>
private void btnExit_Click(object sender, RoutedEventArgs e)
{
if (MessageBox.Show("是否确认关闭程序", "提示信息", MessageBoxButton.YesNo, MessageBoxImage.Information) == MessageBoxResult.Yes)
if (HandyControl.Controls.MessageBox.Show("是否确认关闭程序", "提示信息", MessageBoxButton.YesNo, MessageBoxImage.Information) == MessageBoxResult.Yes)
{
System.Environment.Exit(System.Environment.ExitCode);
}
@ -542,7 +547,7 @@ namespace Khd.Core.Wpf.Form
// this.WcsTaskLogDataGrid.Items.Refresh();
// if (wcsTaskLogs.Count == 0)
// {
// MessageBox.Show("未查询到数据");
// HandyControl.Controls.MessageBox.Show("未查询到数据");
// }
// }
// catch (Exception ex)
@ -557,7 +562,7 @@ namespace Khd.Core.Wpf.Form
// }
// catch
// {
// MessageBox.Show("PLC连接失败,无法读取任务");
// HandyControl.Controls.MessageBox.Show("PLC连接失败,无法读取任务");
// }
// }
// }
@ -598,7 +603,7 @@ namespace Khd.Core.Wpf.Form
this.LoadMaterial0.Items.Refresh();
if (data.Count == 0)
{
MessageBox.Show("未查询到数据");
HandyControl.Controls.MessageBox.Show("未查询到数据");
}
}
/// <summary>
@ -610,12 +615,12 @@ namespace Khd.Core.Wpf.Form
{
if (LoadMaterial0.SelectedIndex == -1)
{
MessageBox.Show("请选择要删除的任务!");
HandyControl.Controls.MessageBox.Show("请选择要删除的任务!");
}
else
{
MessageBoxResult messageBoxResult = MessageBox.Show("确定要删除这些任务吗?", "提示信息", MessageBoxButton.YesNo);
if (messageBoxResult == MessageBoxResult.Yes)
MessageBoxResult MessageBoxResult = HandyControl.Controls.MessageBox.Show("确定要删除这些任务吗?", "提示信息", MessageBoxButton.YesNo);
if (MessageBoxResult == MessageBoxResult.Yes)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
@ -653,7 +658,7 @@ namespace Khd.Core.Wpf.Form
{
if (LoadMaterial0.SelectedIndex == -1)
{
MessageBox.Show("请选择要完成的任务!");
HandyControl.Controls.MessageBox.Show("请选择要完成的任务!");
}
else
{
@ -683,7 +688,7 @@ namespace Khd.Core.Wpf.Form
this.LoadMaterial3.Items.Refresh();
if (data.Count == 0)
{
MessageBox.Show("未查询到数据");
HandyControl.Controls.MessageBox.Show("未查询到数据");
}
}
/// <summary>
@ -734,12 +739,12 @@ namespace Khd.Core.Wpf.Form
this.LoadMaterial1.Items.Refresh();
if (data.Count == 0)
{
MessageBox.Show("未查询到数据");
HandyControl.Controls.MessageBox.Show("未查询到数据");
}
}
else
{
MessageBox.Show("请选择仓库!");
HandyControl.Controls.MessageBox.Show("请选择仓库!");
return;
}
}
@ -764,7 +769,7 @@ namespace Khd.Core.Wpf.Form
// this.LoadMaterial.Items.Refresh();
// if (data.Count == 0)
// {
// MessageBox.Show("未查询到数据");
// HandyControl.Controls.MessageBox.Show("未查询到数据");
// }
//}
///// <summary>
@ -776,7 +781,7 @@ namespace Khd.Core.Wpf.Form
//{
// if (LoadMaterial.SelectedIndex == -1)
// {
// MessageBox.Show("请选择要删除的指令!");
// HandyControl.Controls.MessageBox.Show("请选择要删除的指令!");
// }
// else
// {
@ -798,7 +803,7 @@ namespace Khd.Core.Wpf.Form
//{
// if (LoadMaterial.SelectedIndex == -1)
// {
// MessageBox.Show("请选择要重发的指令!");
// HandyControl.Controls.MessageBox.Show("请选择要重发的指令!");
// }
// else
// {
@ -843,11 +848,11 @@ namespace Khd.Core.Wpf.Form
// };
// dbContext.Add(wmsRawOutstock);
// dbContext.SaveChanges();
// MessageBox.Show("料箱呼叫任务添加成功!");
// HandyControl.Controls.MessageBox.Show("料箱呼叫任务添加成功!");
// }
// else
// {
// MessageBox.Show("请输入有效的数字");
// HandyControl.Controls.MessageBox.Show("请输入有效的数字");
// }
// }
// }
@ -886,7 +891,7 @@ namespace Khd.Core.Wpf.Form
// var mesInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.barcodeInfo == txtBarCode.Text).FirstOrDefault();
// if (mesInfo == null)
// {
// MessageBox.Show("请扫描正确的条码");
// HandyControl.Controls.MessageBox.Show("请扫描正确的条码");
// return;
// }
// barcodeLsit.Add(mesInfo);
@ -914,12 +919,12 @@ namespace Khd.Core.Wpf.Form
// var box = txtBox.Text;
// if (string.IsNullOrEmpty(box))
// {
// MessageBox.Show("容器号不能为空!");
// HandyControl.Controls.MessageBox.Show("容器号不能为空!");
// return;
// }
// if (barcodeLsit.Count == 0)
// {
// MessageBox.Show("未扫描条码!");
// HandyControl.Controls.MessageBox.Show("未扫描条码!");
// return;
// }
// using var scope = _host.Services.CreateScope();
@ -927,7 +932,7 @@ namespace Khd.Core.Wpf.Form
// WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.warehouseId == 512 && t.containerCode == box).FirstOrDefault();
// if (wmsBaseLocation == null)
// {
// MessageBox.Show("容器号不存在!,请重新扫描!");
// HandyControl.Controls.MessageBox.Show("容器号不存在!,请重新扫描!");
// return;
// }
// if (cbxType.Text == "入库")
@ -938,7 +943,7 @@ namespace Khd.Core.Wpf.Form
// .Where(t => t.warehouseFloor == 5 && t.warehouseId == 512).ToList();
// if (wmsRawStocks.Count > 0)
// {
// MessageBox.Show("该批次已入库!");
// HandyControl.Controls.MessageBox.Show("该批次已入库!");
// return;
// }
// foreach (var item in barcodeLsit)
@ -973,12 +978,12 @@ namespace Khd.Core.Wpf.Form
// }
// else
// {
// MessageBox.Show("该批次已入库!");
// HandyControl.Controls.MessageBox.Show("该批次已入库!");
// return;
// }
// }
// dbContext.SaveChanges();
// MessageBox.Show("入库成功!");
// HandyControl.Controls.MessageBox.Show("入库成功!");
// }
// if (cbxType.Text == "出库")
// {
@ -1008,7 +1013,7 @@ namespace Khd.Core.Wpf.Form
// }
// else
// {
// MessageBox.Show("当前容器不存在当前扫描物料");
// HandyControl.Controls.MessageBox.Show("当前容器不存在当前扫描物料");
// }
// }
@ -1021,7 +1026,7 @@ namespace Khd.Core.Wpf.Form
// .Where(t => t.warehouseFloor == 5 && t.warehouseId == 512).ToList();
// if (wmsRawStocks.Count > 0)
// {
// MessageBox.Show("该批次已入库!");
// HandyControl.Controls.MessageBox.Show("该批次已入库!");
// return;
// }
// foreach (var item in barcodeLsit)
@ -1056,12 +1061,12 @@ namespace Khd.Core.Wpf.Form
// }
// else
// {
// MessageBox.Show("该批次已入库!");
// HandyControl.Controls.MessageBox.Show("该批次已入库!");
// return;
// }
// }
// dbContext.SaveChanges();
// MessageBox.Show("回库成功!");
// HandyControl.Controls.MessageBox.Show("回库成功!");
// }
// barcodeLsit.Clear();
// txtScan.Text = string.Empty;
@ -1080,7 +1085,7 @@ namespace Khd.Core.Wpf.Form
/// <param name="e"></param>
private void WindowClose_Click(object sender, RoutedEventArgs e)
{
if (MessageBox.Show("是否确认关闭程序", "提示信息", MessageBoxButton.YesNo, MessageBoxImage.Information) == MessageBoxResult.Yes)
if (HandyControl.Controls.MessageBox.Show("是否确认关闭程序", "提示信息", MessageBoxButton.YesNo, MessageBoxImage.Information) == MessageBoxResult.Yes)
{
System.Environment.Exit(System.Environment.ExitCode);
}
@ -1105,7 +1110,7 @@ namespace Khd.Core.Wpf.Form
}
catch (Exception ex)
{
MessageBox.Show("打开软键盘时出错: " + ex.Message);
HandyControl.Controls.MessageBox.Error("打开软键盘时出错: " + ex.Message);
}
}
/// <summary>
@ -1126,7 +1131,7 @@ namespace Khd.Core.Wpf.Form
}
catch (Exception ex)
{
MessageBox.Show("打开软键盘时出错: " + ex.Message);
HandyControl.Controls.MessageBox.Error("打开软键盘时出错: " + ex.Message);
}
}
/// <summary>
@ -1149,7 +1154,7 @@ namespace Khd.Core.Wpf.Form
.FirstOrDefault();
if (wcsCmd == null)
{
MessageBox.Show("未查询到当前有背负式Agv由装配区到捡料区任务");
HandyControl.Controls.MessageBox.Error("未查询到当前有背负式Agv由装配区到捡料区任务");
}
else
{
@ -1169,12 +1174,12 @@ namespace Khd.Core.Wpf.Form
}
dbContext.Update(wcsCmd);
dbContext.SaveChanges();
MessageBox.Show("背负式Agv任务确认完成成功");
HandyControl.Controls.MessageBox.Success("背负式Agv任务确认完成成功");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
HandyControl.Controls.MessageBox.Error(ex.Message);
}
}
/// <summary>
@ -1232,7 +1237,7 @@ namespace Khd.Core.Wpf.Form
// var material = dbContext.WmsRawStock.Where(t => t.instockBatch == callMaterialId.Text).FirstOrDefault();
// if (material == null)
// {
// MessageBox.Show("批次号不存在!");
// HandyControl.Controls.MessageBox.Show("批次号不存在!");
// callMaterialId.Text = string.Empty;
// }
// else
@ -1258,7 +1263,7 @@ namespace Khd.Core.Wpf.Form
{
if (LoadMaterial0.SelectedIndex == -1)
{
MessageBox.Show("请选择要开始的任务!");
HandyControl.Controls.MessageBox.Show("请选择要开始的任务!");
}
else
{
@ -1284,7 +1289,7 @@ namespace Khd.Core.Wpf.Form
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
HandyControl.Controls.MessageBox.Error(ex.Message);
}
}
@ -1410,14 +1415,14 @@ namespace Khd.Core.Wpf.Form
WcsTask? wcsTask = dbContext.WcsTask.FirstOrDefault(t => t.nextPointId == 11 && t.taskType == 29);
if (wcsTask == null)
{
MessageBox.Show("未查询到当前有CTU入库任务!");
HandyControl.Controls.MessageBox.Info("未查询到当前有CTU入库任务!");
}
else
{
wcsTask.CTUExecute = "1";
dbContext.WcsTask.Update(wcsTask);
dbContext.SaveChanges();
MessageBox.Show("CTU入库任务确认完成成功!");
HandyControl.Controls.MessageBox.Info("CTU入库任务确认完成成功!");
}
}
catch
@ -1467,14 +1472,14 @@ namespace Khd.Core.Wpf.Form
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
if (txtInScan.Text == "")
{
MessageBox.Show("请先输入数量"); return;
HandyControl.Controls.MessageBox.Error("请先输入数量"); return;
}
decimal amount = decimal.Parse(txtInScan.Text);
// 计算入库后当前总数量,仅用来提示使用
decimal? totalMessage = 0;
if (amount <= 0)
{
MessageBox.Show("入库数量需大于0");
HandyControl.Controls.MessageBox.Error("入库数量需大于0");
return;
}
var material = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == txtInBarCode.Text);
@ -1516,13 +1521,12 @@ namespace Khd.Core.Wpf.Form
}
else
{
WmsRawStock wmsRawStock = wmsRawStocks.FirstOrDefault();
WmsRawStock wmsRawStock = wmsRawStocks.First();
wmsRawStock.totalAmount += amount;
dbContext.WmsRawStock.Update(wmsRawStock);
dbContext.SaveChanges();
totalMessage = wmsRawStock.totalAmount;
}
}
else
{
@ -1563,7 +1567,7 @@ namespace Khd.Core.Wpf.Form
}
else
{
MsgText.Text ="请先扫描容器号和条码!";
MsgText.Text = "请先扫描容器号和条码!";
}
}
catch (Exception ex)
@ -1593,7 +1597,7 @@ namespace Khd.Core.Wpf.Form
WmsRawReturn? wmsRawReturn = dbContext.WmsRawReturn.Where(t => t.executeStatus == "1").FirstOrDefault();
if (wmsRawReturn == null)
{
MessageBox.Show("未查询到退库任务!");
HandyControl.Controls.MessageBox.Show("未查询到退库任务!");
return;
}
var material = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == txtInBarCode.Text);
@ -1603,20 +1607,20 @@ namespace Khd.Core.Wpf.Form
.Where(t => t.warehouseFloor == 5 && t.warehouseId == 512).ToList();
if (wmsRawStocks.Count > 0)
{
MessageBox.Show($"该条码已入库!料箱号为{wmsRawStocks.First().palletInfoCode},库位号为{wmsRawStocks.First().locationCode}");
HandyControl.Controls.MessageBox.Info($"该条码已入库!料箱号为{wmsRawStocks.First().palletInfoCode},库位号为{wmsRawStocks.First().locationCode}");
txtInBarCode.Text = string.Empty;
txtInScan.Text = string.Empty;
return;
}
if (container == null)
{
MessageBox.Show("未查询到该容器!");
HandyControl.Controls.MessageBox.Error("未查询到该容器!");
txtInBox.Text = string.Empty;
return;
}
if (material == null)
{
MessageBox.Show("未查询到该条码内容!");
HandyControl.Controls.MessageBox.Error("未查询到该条码内容!");
txtInBarCode.Text = string.Empty;
txtInScan.Text = string.Empty;
return;
@ -1645,20 +1649,20 @@ namespace Khd.Core.Wpf.Form
};
dbContext.WmsRawStock.Add(newRawStock);
dbContext.SaveChanges();
MessageBox.Show("入库成功!");
HandyControl.Controls.MessageBox.Success("入库成功!");
txtInBarCode.Text = string.Empty;
txtInScan.Text = string.Empty;
txtInBarCode.Focus();
}
else
{
MessageBox.Show("请先扫描容器号和条码!");
HandyControl.Controls.MessageBox.Info("请先扫描容器号和条码!");
}
}
catch (Exception ex)
{
LogManager.Error(ex);
MessageBox.Show("入库失败");
HandyControl.Controls.MessageBox.Error("入库失败");
}
}
/// <summary>
@ -1871,19 +1875,19 @@ namespace Khd.Core.Wpf.Form
.FirstOrDefault(t => t.instockBatch == txtOutBarCode.Text && t.palletInfoCode == txtOutBox.Text);
if (wmsRawStock == null)
{
MessageBox.Show("库存已经被清空!");
HandyControl.Controls.MessageBox.Error("库存已经被清空!");
return;
}
decimal outScan = Convert.ToDecimal(this.txtOutScan.Text);
if (outScan != 1 && outScan > wmsRawStock.totalAmount - wmsRawStock.frozenAmount)
{
MessageBox.Show("出库数量不能大于库存数量!");
HandyControl.Controls.MessageBox.Error("出库数量不能大于库存数量!");
return;
}
var wcsTask = dbContext.WcsTask.Where(t => t.containerNo == txtOutBox.Text).FirstOrDefault();
if (wcsTask == null)
{
MessageBox.Show("出库失败非CTU出库任务无法出库!");
HandyControl.Controls.MessageBox.Error("出库失败非CTU出库任务无法出库!");
return;
}
else
@ -1902,7 +1906,7 @@ namespace Khd.Core.Wpf.Form
}
else if (wmsRawOutstock.realOutstockAmount > wmsRawOutstock.outstockAmount)
{
MessageBox.Show("出库数量不能大于申请单数量,当前出库数量为:" + (wmsRawOutstock.realOutstockAmount - outScan) + ",申请单数量为:" + wmsRawOutstock.outstockAmount + "!");
HandyControl.Controls.MessageBox.Error("出库数量不能大于申请单数量,当前出库数量为:" + (wmsRawOutstock.realOutstockAmount - outScan) + ",申请单数量为:" + wmsRawOutstock.outstockAmount + "!");
return;
}
wmsRawStock.totalAmount -= outScan;
@ -1961,27 +1965,27 @@ namespace Khd.Core.Wpf.Form
}
else
{
MessageBox.Show("该条码的销售订单不正确");
HandyControl.Controls.MessageBox.Error("该条码的销售订单不正确");
txtOutScan.Text = string.Empty;
txtOutBarCode.Text = string.Empty;
return;
}
}
MessageBox.Show("出库成功!");
HandyControl.Controls.MessageBox.Success("出库成功!");
txtOutScan.Text = string.Empty;
txtOutBarCode.Text = string.Empty;
txtOutBarCode.Focus();
}
else
{
MessageBox.Show("未查询到该条码信息!");
HandyControl.Controls.MessageBox.Error("未查询到该条码信息!");
}
}
}
else
{
MessageBox.Show("请先扫描容器号和条码!");
HandyControl.Controls.MessageBox.Info("请先扫描容器号和条码!");
}
}
/// <summary>
@ -2079,7 +2083,7 @@ namespace Khd.Core.Wpf.Form
Pagination2.MaxPageCount = (sum / pageCount) + (sum % pageCount == 0 ? 0 : 1);
if (bills.Count == 0)
{
MessageBox.Show("未查询到数据");
HandyControl.Controls.MessageBox.Show("未查询到数据");
}
}
catch
@ -2240,21 +2244,21 @@ namespace Khd.Core.Wpf.Form
dbContext.AddRange(addCheckDetail);
dbContext.AddRange(addList);
dbContext.SaveChanges();
MessageBox.Show("任务创建成功!");
HandyControl.Controls.MessageBox.Show("任务创建成功!");
}
else
{
MessageBox.Show("无可盘点库位!");
HandyControl.Controls.MessageBox.Error("无可盘点库位!");
}
}
else
{
MessageBox.Show("当前有盘点任务正在出库");
HandyControl.Controls.MessageBox.Info("当前有盘点任务正在出库");
}
}
else
{
MessageBox.Show("当前有盘点任务正在出库");
HandyControl.Controls.MessageBox.Info("当前有盘点任务正在出库");
}
}
}
@ -2281,7 +2285,7 @@ namespace Khd.Core.Wpf.Form
//int taskCount = dbContext.WcsTask.Where(t => t.taskType == 30).Count();
//if (taskCount >= 6)
//{
// HandyControl.Controls.MessageBox.Show("当前CTU入库任务已满6个,请等待任务完成后再叫空箱!");
// HandyControl.Controls.HandyControl.Controls.MessageBox.Show("当前CTU入库任务已满6个,请等待任务完成后再叫空箱!");
// return;
//}
var wmsBaseLocation = dbContext.WmsBaseLocation
@ -2323,11 +2327,11 @@ namespace Khd.Core.Wpf.Form
}
dbContext.AddRange(addList);
dbContext.SaveChanges();
MessageBox.Show("任务创建成功!");
HandyControl.Controls.MessageBox.Show("任务创建成功!");
}
else
{
MessageBox.Show($"没有足够的空箱库位库位,剩余空库位数量为{wmsBaseLocation.Count}!");
HandyControl.Controls.MessageBox.Error($"没有足够的空箱库位库位,剩余空库位数量为{wmsBaseLocation.Count}!");
}
}
@ -2351,7 +2355,7 @@ namespace Khd.Core.Wpf.Form
BaseEquip endEquip = SystemData.BaseEquip.First(t => t.objid == 20);
if (CallSelectedItem.Count == 0)
{
MessageBox.Show("请选择料箱!");
HandyControl.Controls.MessageBox.Show("请选择料箱!");
return;
}
@ -2360,7 +2364,7 @@ namespace Khd.Core.Wpf.Form
//int taskCount = dbContext.WcsTask.Where(t => t.nextPointId == 11).Count();
//if (taskCount + ids.Count > 6)
//{
// MessageBox.Show($"当前CTU只能有6个任务,当前任务数{taskCount}");
// HandyControl.Controls.MessageBox.Show($"当前CTU只能有6个任务,当前任务数{taskCount}");
// return;
//}
var wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.warehouseId == 512 && t.ContainerStatus == "1").Where(t => CallSelectedItem.Contains(t.locationId)).ToList();
@ -2370,8 +2374,8 @@ namespace Khd.Core.Wpf.Form
{
stringBuilder.AppendLine($"库位号{item.locationCode},料箱号{item.containerCode}.");
}
MessageBoxResult messageBoxResult = MessageBox.Show(stringBuilder.ToString(), "提示", MessageBoxButton.YesNo);
if (messageBoxResult == MessageBoxResult.Yes)
MessageBoxResult MessageBoxResult = HandyControl.Controls.MessageBox.Show(stringBuilder.ToString(), "提示", MessageBoxButton.YesNo);
if (MessageBoxResult == MessageBoxResult.Yes)
{
List<WcsTaskManual> addList = new List<WcsTaskManual>();
foreach (var item in wmsBaseLocation)
@ -2403,7 +2407,7 @@ namespace Khd.Core.Wpf.Form
}
dbContext.AddRange(addList);
dbContext.SaveChanges();
MessageBox.Show("创建出库任务成功!");
HandyControl.Controls.MessageBox.Show("创建出库任务成功!");
}
CallSelectedItem.Clear();
GetPersonCallMaterialData();
@ -2437,11 +2441,11 @@ namespace Khd.Core.Wpf.Form
dbContext.Update(task);
dbContext.SaveChanges();
}
MessageBox.Show("任务执行成功!");
HandyControl.Controls.MessageBox.Show("任务执行成功!");
}
else
{
MessageBox.Show("没有可执行的任务!");
HandyControl.Controls.MessageBox.Error("没有可执行的任务!");
}
}
}
@ -2471,8 +2475,11 @@ namespace Khd.Core.Wpf.Form
if (item.Value.IP == ex.Message)
{
MsgText.Text = "PLC断开连接正在重连!";
SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Slot, item.Value.Rack);
Task.Run(() =>
{
SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot);
SystemData.PlcDic[item.Key].Open();
});
break;
}
}
@ -2523,7 +2530,7 @@ namespace Khd.Core.Wpf.Form
{
if (!ReadEmptyLocation())
{
MessageBox.Show("有任务正在执行");
HandyControl.Controls.MessageBox.Show("有任务正在执行");
return;
}
using var scope = _host.Services.CreateScope();
@ -2534,11 +2541,11 @@ namespace Khd.Core.Wpf.Form
baseEquip.emptyCount += 1;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
MessageBox.Show("下发成功");
HandyControl.Controls.MessageBox.Show("下发成功");
}
else
{
MessageBox.Show("未检测到托盘");
HandyControl.Controls.MessageBox.Error("未检测到托盘");
}
}
catch (Exception ex)
@ -2549,9 +2556,12 @@ namespace Khd.Core.Wpf.Form
{
if (item.Value.IP == ex.Message)
{
MessageBox.Show("PLC断开连接正在重连!");
HandyControl.Controls.MessageBox.Error("PLC断开连接正在重连!");
Task.Run(() =>
{
SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot);
SystemData.PlcDic[item.Key].Open();
});
}
}
}
@ -2569,7 +2579,7 @@ namespace Khd.Core.Wpf.Form
{
if (!ReadEmptyLocation())
{
MessageBox.Show("有任务正在执行");
HandyControl.Controls.MessageBox.Show("有任务正在执行");
return;
}
using var scope = _host.Services.CreateScope();
@ -2580,11 +2590,11 @@ namespace Khd.Core.Wpf.Form
baseEquip.emptyCount -= 1;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
MessageBox.Show("下发成功");
HandyControl.Controls.MessageBox.Show("下发成功");
}
else
{
MessageBox.Show("检测到外侧有托盘,无法出堆垛机");
HandyControl.Controls.MessageBox.Show("检测到外侧有托盘,无法出堆垛机");
}
}
catch (Exception ex)
@ -2595,9 +2605,12 @@ namespace Khd.Core.Wpf.Form
{
if (item.Value.IP == ex.Message)
{
MessageBox.Show("PLC断开连接正在重连!");
HandyControl.Controls.MessageBox.Show("PLC断开连接正在重连!");
Task.Run(() =>
{
SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot);
SystemData.PlcDic[item.Key].Open();
});
}
}
}
@ -2619,7 +2632,7 @@ namespace Khd.Core.Wpf.Form
{
if (!ReadEmptyLocation())
{
MessageBox.Show("有任务正在执行");
HandyControl.Controls.MessageBox.Show("有任务正在执行");
return;
}
int emptyTaskCount = EmptyCountForm.EmptyTaskCount;
@ -2631,12 +2644,12 @@ namespace Khd.Core.Wpf.Form
baseEquip.emptyCount = emptyTaskCount;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
MessageBox.Show("下发成功");
HandyControl.Controls.MessageBox.Show("下发成功");
}
}
//else
//{
// MessageBox.Show("未检测到托盘");
// HandyControl.Controls.MessageBox.Show("未检测到托盘");
//}
}
catch (Exception ex)
@ -2647,9 +2660,12 @@ namespace Khd.Core.Wpf.Form
{
if (item.Value.IP == ex.Message)
{
MessageBox.Show("PLC断开连接正在重连!");
HandyControl.Controls.MessageBox.Show("PLC断开连接正在重连!");
Task.Run(() =>
{
SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot);
SystemData.PlcDic[item.Key].Open();
});
}
}
}
@ -2663,7 +2679,7 @@ namespace Khd.Core.Wpf.Form
{
if (!ReadEmptyLocation())
{
MessageBox.Show("有任务正在执行");
HandyControl.Controls.MessageBox.Show("有任务正在执行");
return;
}
BasePlcpoint lineSignal = SystemData.BasePlcpoints.First(t => t.plcpointNo == "linesignal01");
@ -2678,11 +2694,11 @@ namespace Khd.Core.Wpf.Form
baseEquip.emptyCount = 0;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
MessageBox.Show("下发成功");
HandyControl.Controls.MessageBox.Show("下发成功");
}
else
{
MessageBox.Show("检测到外侧有托盘,无法出堆垛机");
HandyControl.Controls.MessageBox.Show("检测到外侧有托盘,无法出堆垛机");
}
}
@ -2694,9 +2710,12 @@ namespace Khd.Core.Wpf.Form
{
if (item.Value.IP == ex.Message)
{
MessageBox.Show("PLC断开连接正在重连!");
HandyControl.Controls.MessageBox.Show("PLC断开连接正在重连!");
Task.Run(() =>
{
SystemData.PlcDic[item.Key] = new Plc.S7.Plc(item.Value.CPU, item.Value.IP, item.Value.Port, item.Value.Rack, item.Value.Slot);
SystemData.PlcDic[item.Key].Open();
});
}
}
}
@ -2722,7 +2741,7 @@ namespace Khd.Core.Wpf.Form
baseEquip.emptyCount = EmptyCountForm.EmptyTaskCount;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
MessageBox.Show("修改成功");
HandyControl.Controls.MessageBox.Show("修改成功");
}
}
}
@ -2750,7 +2769,7 @@ namespace Khd.Core.Wpf.Form
bool hasTaskManual = dbContext.WcsTaskManual.Where(t => t.endPointId == baseEquip.objid || t.currPointId == baseEquip.objid).Any();
if (hasTask || hasTaskManual)
{
MessageBox.Show("有任务正在执行,请等待任务完成后再执行此操作!");
HandyControl.Controls.MessageBox.Show("有任务正在执行,请等待任务完成后再执行此操作!");
return;
}
else
@ -2758,7 +2777,7 @@ namespace Khd.Core.Wpf.Form
var endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0);
if (endEquip == null)
{
MessageBox.Show("没有空箱库位!");
HandyControl.Controls.MessageBox.Show("没有空箱库位!");
return;
}
else
@ -2784,7 +2803,7 @@ namespace Khd.Core.Wpf.Form
};
dbContext.Add(task);
dbContext.SaveChanges();
MessageBox.Show("任务生成成功!");
HandyControl.Controls.MessageBox.Show("任务生成成功!");
}
}
}
@ -2804,7 +2823,7 @@ namespace Khd.Core.Wpf.Form
bool hasTaskManual = dbContext.WcsTaskManual.Where(t => t.endPointId == baseEquip.objid || t.currPointId == baseEquip.objid).Any();
if (hasTask || hasTaskManual)
{
MessageBox.Show("有任务正在执行,请等待任务完成后再执行此操作!");
HandyControl.Controls.MessageBox.Show("有任务正在执行,请等待任务完成后再执行此操作!");
return;
}
else
@ -2815,8 +2834,8 @@ namespace Khd.Core.Wpf.Form
BaseEquip firstEmptyEquip = dbContext.BaseEquip.First(t => t.objid == 40);
if (firstEmptyEquip.emptyCount > 0)
{
MessageBoxResult messageBoxResult = MessageBox.Show("二楼未找到一个托盘的库位,是否从一楼调取?", "提示", MessageBoxButton.OKCancel);
if (messageBoxResult == MessageBoxResult.OK)
MessageBoxResult MessageBoxResult = HandyControl.Controls.MessageBox.Show("二楼未找到一个托盘的库位,是否从一楼调取?", "提示", MessageBoxButton.OKCancel);
if (MessageBoxResult == MessageBoxResult.OK)
{
if (ReadEmptyLocation())
{
@ -2825,17 +2844,17 @@ namespace Khd.Core.Wpf.Form
firstEmptyEquip.emptyCount -= 1;
dbContext.Update(firstEmptyEquip);
dbContext.SaveChanges();
MessageBox.Show("下发成功");
HandyControl.Controls.MessageBox.Show("下发成功");
}
else
{
MessageBox.Show("一楼托盘库忙碌中,请稍后再试!");
HandyControl.Controls.MessageBox.Show("一楼托盘库忙碌中,请稍后再试!");
}
}
}
else
{
MessageBox.Show("未找到一个托盘的库位");
HandyControl.Controls.MessageBox.Show("未找到一个托盘的库位");
return;
}
}
@ -2862,7 +2881,7 @@ namespace Khd.Core.Wpf.Form
};
dbContext.Add(task);
dbContext.SaveChanges();
MessageBox.Show("任务生成成功!");
HandyControl.Controls.MessageBox.Show("任务生成成功!");
}
}
}
@ -2895,8 +2914,8 @@ namespace Khd.Core.Wpf.Form
{
if (this.EmptyEquip.SelectedItem is BaseEquip equip)
{
MessageBoxResult messageBoxResult = MessageBox.Show($"是否清除{equip.equipName}的托盘信息?", "提示", MessageBoxButton.OKCancel);
if (messageBoxResult == MessageBoxResult.OK)
MessageBoxResult MessageBoxResult = HandyControl.Controls.MessageBox.Show($"是否清除{equip.equipName}的托盘信息?", "提示", MessageBoxButton.OKCancel);
if (MessageBoxResult == MessageBoxResult.OK)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
@ -2905,7 +2924,7 @@ namespace Khd.Core.Wpf.Form
baseEquip.equipStatus = 0;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
MessageBox.Show("清除成功");
HandyControl.Controls.MessageBox.Show("清除成功");
}
}
}
@ -2921,7 +2940,7 @@ namespace Khd.Core.Wpf.Form
bool hasTaskManual = dbContext.WcsTaskManual.Where(t => t.currPointId == baseEquip.objid || t.endPointId == baseEquip.objid).Any();
if (hastask || hasTaskManual)
{
MessageBox.Show("已存在当前库位的任务");
HandyControl.Controls.MessageBox.Show("已存在当前库位的任务");
return;
}
if (baseEquip.emptyCount > 0)
@ -2948,12 +2967,12 @@ namespace Khd.Core.Wpf.Form
};
dbContext.Add(task);
dbContext.SaveChanges();
MessageBox.Show("下发成功");
HandyControl.Controls.MessageBox.Show("下发成功");
}
}
else
{
MessageBox.Show("库位已空!");
HandyControl.Controls.MessageBox.Show("库位已空!");
}
}
}
@ -2977,11 +2996,11 @@ namespace Khd.Core.Wpf.Form
baseEquip.containerNo = null;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
MessageBox.Show("确认入库成功!");
HandyControl.Controls.MessageBox.Show("确认入库成功!");
}
else
{
MessageBox.Show("未扫描到RFID");
HandyControl.Controls.MessageBox.Show("未扫描到RFID");
}
}
@ -2998,14 +3017,14 @@ namespace Khd.Core.Wpf.Form
{
if (user.OBJID == 1)
{
MessageBox.Show("不能删除根用户!");
HandyControl.Controls.MessageBox.Show("不能删除根用户!");
return;
}
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
dbContext.SysUser.Remove(user);
dbContext.SaveChanges();
MessageBox.Show("删除成功!");
HandyControl.Controls.MessageBox.Show("删除成功!");
GetMenu();
}
}
@ -3077,7 +3096,7 @@ namespace Khd.Core.Wpf.Form
{
//if (user.OBJID == 1)
//{
// MessageBox.Show("不能修改根用户!");
// HandyControl.Controls.MessageBox.Show("不能修改根用户!");
// return;
//}
MenuList menuList = new MenuList(_host, user.OBJID);
@ -3127,7 +3146,7 @@ namespace Khd.Core.Wpf.Form
this.InventoryMaterial.Items.Refresh();
if (list.Count == 0)
{
MessageBox.Show("没有数据!");
HandyControl.Controls.MessageBox.Show("没有数据!");
}
}
catch
@ -3148,5 +3167,23 @@ namespace Khd.Core.Wpf.Form
SelectOutRawForm selectOutRawForm = new SelectOutRawForm(this._host);
selectOutRawForm.ShowDialog();
}
private void ContineOutBtn_Click(object sender, RoutedEventArgs e)
{
try
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
BaseEquip baseEquip = dbContext.BaseEquip.Where(t => t.objid == 10).First();
baseEquip.IsOut = 1;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
HandyControl.Controls.MessageBox.Show("继续出库成功!");
}
catch
{
}
}
}
}

@ -3,8 +3,8 @@
//mysql
//"DefaultConnection": "server=106.12.13.113;port=3306;database=khd_jyhb;uid=root;pwd=root;charset='utf8';persistsecurityinfo=True;SslMode=none;Allow User Variables=True"
//khd
"DefaultConnection": "server=172.16.12.100;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khdrkjy2024...;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True"
//"DefaultConnection": "server=106.12.13.113;port=3336;database=khd_jyhb;uid=khd;pwd=khd@123;charset='utf8';persistsecurityinfo=True;SslMode=none;Allow User Variables=True"
//"DefaultConnection": "server=172.16.12.100;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khdrkjy2024...;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True"
"DefaultConnection": "server=175.27.215.92;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khd2024;charset='utf8';persistsecurityinfo=True;SslMode=none;Allow User Variables=True"
//"DefaultConnection": "server=localhost;port=3306;database=jyhb;uid=root;pwd=root;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True"
},
"PlcConfigs": [

Loading…
Cancel
Save