1 year ago
parent 7f3316ded8
commit 6687d850b2

@ -67,7 +67,7 @@ namespace Khd.Core.Api.Controllers
[HttpPost("taskContinue")] [HttpPost("taskContinue")]
public AgvCompeletedResponse TaskContinue(TaskContinue taskContinue) public AgvCompeletedResponse TaskContinue(TaskContinue taskContinue)
{ {
LogManager.Info($"TaskContinue 接口收到消息: {taskContinue}"); LogManager.Info($"TaskContinue 接口收到消息: {taskContinue.ToJsonString()}");
return _application.TaskContinue(taskContinue); return _application.TaskContinue(taskContinue);
} }

@ -231,7 +231,7 @@ namespace Khd.Core.Application
_dbContext.ChangeTracker.Clear(); _dbContext.ChangeTracker.Clear();
var wcsTask = _dbContext.WcsTask var wcsTask = _dbContext.WcsTask
.Where(t => t.taskType == 47) .Where(t => t.taskType == 47)
.Where(t => t.materialId == taskContinue.materialId) .Where(t => t.containerNo == taskContinue.palletInfoCode)
.FirstOrDefault(); .FirstOrDefault();
if (wcsTask != null) if (wcsTask != null)
{ {

@ -38,7 +38,7 @@ namespace Khd.Core.Wcs
LoggerUtils logger = new LoggerUtils(); LoggerUtils logger = new LoggerUtils();
using var scope = _host.Services.CreateScope(); using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>(); var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
try try
{ {
StaticData.BasePlcpointList = dbContext.BasePlcpoint.Where(t => t.isDelete == 0).ToList();//设备交互用 StaticData.BasePlcpointList = dbContext.BasePlcpoint.Where(t => t.isDelete == 0).ToList();//设备交互用

@ -42,7 +42,9 @@ namespace Khd.Core.Wcs
{ {
if (wmsBaseLocation.locDeep == 1) if (wmsBaseLocation.locDeep == 1)
{ {
WmsBaseLocation? wmsLocation = dbContext.WmsBaseLocation.Where(t => t.locDeep == 2 && t.locRow == wmsBaseLocation.locRow && t.locColumn == (wmsBaseLocation.locColumn % 2 == 0 ? wmsBaseLocation.locColumn - 1 : wmsBaseLocation.locColumn + 1)).FirstOrDefault(); WmsBaseLocation? wmsLocation = dbContext.WmsBaseLocation
.Where(t => t.warehouseId == wmsBaseLocation.warehouseId)
.Where(t => t.locDeep == 2 && t.locColumn == wmsBaseLocation.locColumn && t.locRow == (wmsBaseLocation.locRow % 2 == 0 ? wmsBaseLocation.locRow - 1 : wmsBaseLocation.locRow + 1)).FirstOrDefault();
if (wmsLocation != null && wmsLocation.locationStatus == "1") if (wmsLocation != null && wmsLocation.locationStatus == "1")
{ {
wmsLocation.locationStatus = "2"; wmsLocation.locationStatus = "2";
@ -60,13 +62,16 @@ namespace Khd.Core.Wcs
{ {
if (wmsBaseLocation.locDeep == 1) if (wmsBaseLocation.locDeep == 1)
{ {
WmsBaseLocation? wmsLocation = dbContext.WmsBaseLocation.Where(t => t.locDeep == 2 && t.locRow == wmsBaseLocation.locRow && t.locColumn == (wmsBaseLocation.locColumn % 2 == 0 ? wmsBaseLocation.locColumn - 1 : wmsBaseLocation.locColumn + 1)).FirstOrDefault(); WmsBaseLocation? wmsLocation = dbContext.WmsBaseLocation
.Where(t => t.warehouseId == wmsBaseLocation.warehouseId)
.Where(t => t.locDeep == 2 && t.locColumn == wmsBaseLocation.locColumn && t.locRow == (wmsBaseLocation.locRow % 2 == 0 ? wmsBaseLocation.locRow - 1 : wmsBaseLocation.locRow + 1)).FirstOrDefault();
if (wmsLocation != null && wmsLocation.locationStatus != "3" && wmsLocation.locationStatus != "9") if (wmsLocation != null && wmsLocation.locationStatus != "3" && wmsLocation.locationStatus != "9")
{ {
wmsLocation.locationStatus = "1"; wmsLocation.locationStatus = "1";
dbContext.Update(wmsLocation); dbContext.Update(wmsLocation);
} }
} }
wmsBaseLocation.locationStatus = "1";
} }
/// <summary> /// <summary>
@ -201,6 +206,12 @@ namespace Khd.Core.Wcs
} }
internal static WmsBaseLocation? GetLowerLocation(WmsBaseLocation wmslocation, DefaultDbContext dbContext)
{
return dbContext.WmsBaseLocation.Where(t => t.warehouseId == wmslocation.warehouseId)
.Where(t => t.locDeep == 2 && t.locColumn == wmslocation.locColumn && t.locRow == (wmslocation.locRow % 2 == 0 ? wmslocation.locRow - 1 : wmslocation.locRow + 1)).FirstOrDefault();
}
public readonly static object SecondTaskLock = new(); public readonly static object SecondTaskLock = new();
public readonly static object ThirdTaskLock = new(); public readonly static object ThirdTaskLock = new();
public readonly static object FiveTaskLock = new(); public readonly static object FiveTaskLock = new();

@ -14,6 +14,7 @@ using Newtonsoft.Json;
using SixLabors.ImageSharp; using SixLabors.ImageSharp;
using System.Data; using System.Data;
using System.Drawing.Text; using System.Drawing.Text;
using Thrift.Protocol;
using Z.EntityFramework.Plus; using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs namespace Khd.Core.Wcs.Wcs
@ -146,6 +147,24 @@ namespace Khd.Core.Wcs.Wcs
{ {
WmsBaseLocation? wmslocation = dbContext.WmsBaseLocation.FirstOrDefault(t => t.locationCode == item.OriLocationCode); WmsBaseLocation? wmslocation = dbContext.WmsBaseLocation.FirstOrDefault(t => t.locationCode == item.OriLocationCode);
WmsBaseLocation? toLocation = dbContext.WmsBaseLocation.FirstOrDefault(t => t.locationCode == item.TargetLocationCode); WmsBaseLocation? toLocation = dbContext.WmsBaseLocation.FirstOrDefault(t => t.locationCode == item.TargetLocationCode);
if (wmslocation != null && wmslocation.locDeep == 1)
{
//查询浅库位状态
var lowerLocation = SystemData.GetLowerLocation(wmslocation, dbContext);
if (lowerLocation != null && (lowerLocation == null || lowerLocation.locationStatus != "1" || !string.IsNullOrEmpty(lowerLocation.containerCode)))
{
continue;
}
}
if (toLocation != null && toLocation.locDeep == 1)
{
//查询浅库位状态
var lowerLocation = SystemData.GetLowerLocation(toLocation, dbContext);
if (lowerLocation != null && (lowerLocation == null || lowerLocation.locationStatus != "1" || !string.IsNullOrEmpty(lowerLocation.containerCode)))
{
continue;
}
}
if (wmslocation != null && toLocation != null) if (wmslocation != null && toLocation != null)
{ {
var RemoveTask = new WcsTask() var RemoveTask = new WcsTask()
@ -170,6 +189,8 @@ namespace Khd.Core.Wcs.Wcs
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(RemoveTask); WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(RemoveTask);
SystemData.LockOutLocation(toLocation, dbContext); SystemData.LockOutLocation(toLocation, dbContext);
SystemData.LockOutLocation(wmslocation, dbContext); SystemData.LockOutLocation(wmslocation, dbContext);
wmslocation.locationStatus = "4";
toLocation.locationStatus = "4";
dbContext.Add(RemoveTask); dbContext.Add(RemoveTask);
dbContext.Add(wcsTaskLog); dbContext.Add(wcsTaskLog);
item.ExecuteStatus = "1"; item.ExecuteStatus = "1";
@ -177,6 +198,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(item); dbContext.Update(item);
dbContext.SaveChanges(); dbContext.SaveChanges();
Console.WriteLine(DateTime.Now + $":创建移库任务成功:{item.OriLocationCode}--{item.TargetLocationCode}"); Console.WriteLine(DateTime.Now + $":创建移库任务成功:{item.OriLocationCode}--{item.TargetLocationCode}");
_logger.Info("创建移库任务成功:" + item.OriLocationCode + "--" + item.TargetLocationCode);
} }
} }
} }
@ -535,7 +557,7 @@ namespace Khd.Core.Wcs.Wcs
{ {
dbContext.ChangeTracker.Clear(); dbContext.ChangeTracker.Clear();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 29); BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 29);
if (baseEquip.emptyCount == 1) //if (baseEquip.emptyCount == 1)
{ {
WcsTask? wcsTask = dbContext.WcsTask.Where(t => t.nextPointId == 28).FirstOrDefault(); WcsTask? wcsTask = dbContext.WcsTask.Where(t => t.nextPointId == 28).FirstOrDefault();
if (wcsTask == null) if (wcsTask == null)
@ -1485,6 +1507,8 @@ namespace Khd.Core.Wcs.Wcs
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>(); using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
while (true) while (true)
{ {
var isCreate = false;
string message = "";
try try
{ {
dbContext.ChangeTracker.Clear(); dbContext.ChangeTracker.Clear();
@ -1614,8 +1638,8 @@ namespace Khd.Core.Wcs.Wcs
.Any(); .Any();
if (!hasLocation) if (!hasLocation)
{ {
Console.WriteLine(DateTime.Now + $":目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); Console.WriteLine(DateTime.Now + $":目标库位的浅库位库位状态异常,无法移库");
_logger.Info($"目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); _logger.Info($"目标库位的浅库位库位状态异常,无法移库");
continue; continue;
} }
else else
@ -1643,7 +1667,7 @@ namespace Khd.Core.Wcs.Wcs
{ {
objid = StaticData.SnowId.NextId(), objid = StaticData.SnowId.NextId(),
orderId = item.productOutstockId, orderId = item.productOutstockId,
taskType = StaticTaskType.SecondRemove, taskType = StaticTaskType.FiveRemove,
containerNo = wmsBaseLocation.containerCode, containerNo = wmsBaseLocation.containerCode,
createBy = "WCS", createBy = "WCS",
createTime = DateTime.Now.AddSeconds(-10), createTime = DateTime.Now.AddSeconds(-10),
@ -1743,6 +1767,7 @@ namespace Khd.Core.Wcs.Wcs
} }
else else
{ {
message = "创建移库任务失败";
Console.WriteLine(DateTime.Now + $":{wmsBaseLocation.locationCode}库位状态异常,无法移库"); Console.WriteLine(DateTime.Now + $":{wmsBaseLocation.locationCode}库位状态异常,无法移库");
_logger.Info($"{wmsBaseLocation.locationCode}库位状态异常,无法移库"); _logger.Info($"{wmsBaseLocation.locationCode}库位状态异常,无法移库");
continue; continue;
@ -1794,6 +1819,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(location); dbContext.Update(location);
dbContext.Add(wcsTask); dbContext.Add(wcsTask);
dbContext.Update(stock); dbContext.Update(stock);
isCreate = true;
break; break;
} }
} }
@ -1803,6 +1829,7 @@ namespace Khd.Core.Wcs.Wcs
} }
dbContext.Update(item); dbContext.Update(item);
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
} }
} }
@ -1810,9 +1837,18 @@ namespace Khd.Core.Wcs.Wcs
} }
catch (Exception ex) catch (Exception ex)
{ {
message += ex.Message;
Console.WriteLine(ex.Message + ex.StackTrace); Console.WriteLine(ex.Message + ex.StackTrace);
_logger.Error(ex.Message + "\n" + ex.StackTrace); _logger.Error(ex.Message + "\n" + ex.StackTrace);
} }
if (isCreate)
{
SystemData.DeleteWaringLog(dbContext, WaringType.);
}
else
{
SystemData.InsertWaringLog(dbContext, WaringType., message);
}
Thread.Sleep(5000); Thread.Sleep(5000);
} }
} }

@ -451,20 +451,36 @@ namespace Khd.Core.Wcs.Wcs
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext); SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
SystemData.UnLockOutLocation(toLocation, dbContext); SystemData.UnLockOutLocation(toLocation, dbContext);
dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).Update(t => new WmsBaseLocation
{ toLocation.returnFlag = wmsBaseLocation.returnFlag;
returnFlag = "0",
locationStatus = "1", wmsBaseLocation.returnFlag = "0";
containerCode = null, wmsBaseLocation.locationStatus = "1";
updateTime = DateTime.Now wmsBaseLocation.containerCode = null;
}); wmsBaseLocation.updateTime = DateTime.Now;
dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).Update(t => new WmsBaseLocation dbContext.Update(wmsBaseLocation);
{ dbContext.SaveChanges();
locationStatus = "1",
returnFlag = wmsBaseLocation.returnFlag, toLocation.locationStatus = "1";
containerCode = item.containerNo, toLocation.containerCode = item.containerNo;
updateTime = DateTime.Now toLocation.updateTime = DateTime.Now;
}); dbContext.Update(toLocation);
dbContext.SaveChanges();
//dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).Update(t => new WmsBaseLocation
//{
// returnFlag = "0",
// locationStatus = "1",
// containerCode = null,
// updateTime = DateTime.Now
//});
//dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).Update(t => new WmsBaseLocation
//{
// locationStatus = "1",
// returnFlag = wmsBaseLocation.returnFlag,
// containerCode = item.containerNo,
// updateTime = DateTime.Now
//});
dbContext.Remove(item); dbContext.Remove(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 }); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
#region 插入移库记录 #region 插入移库记录
@ -520,7 +536,6 @@ namespace Khd.Core.Wcs.Wcs
dbContext.WmsMoveDetail.Add(wmsMoveDetail); dbContext.WmsMoveDetail.Add(wmsMoveDetail);
#endregion #endregion
dbContext.SaveChanges(); dbContext.SaveChanges();
dbContextTransaction.Commit(); dbContextTransaction.Commit();
SystemData.SendPlcLocation(wmsBaseLocation); SystemData.SendPlcLocation(wmsBaseLocation);
@ -794,7 +809,7 @@ namespace Khd.Core.Wcs.Wcs
updateDate = DateTime.Now, updateDate = DateTime.Now,
warehouseId = 511, warehouseId = 511,
}; };
var WmsRawInstock = dbContext.WmsRawInstock.FirstOrDefault(t => t.materialBarCode == mesBasePalletInfo.materialBarcode && t.instockType == "2"); var WmsRawInstock = dbContext.WmsRawInstock.FirstOrDefault(t => t.materialBarCode == mesBasePalletInfo.materialBarcode && (t.instockType == "2"|| t.instockType == "4"));
if (WmsRawInstock != null) if (WmsRawInstock != null)
{ {
WmsRawInstock.returnFlag = null; WmsRawInstock.returnFlag = null;

@ -228,6 +228,7 @@ namespace Khd.Core.Wcs.Wcs
else if (wcsTask.taskStatus == 6) //出库任务,小车任务是完成状态 else if (wcsTask.taskStatus == 6) //出库任务,小车任务是完成状态
{ {
BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.equipType == 2);//提升机 BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.equipType == 2);//提升机
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 1);//提升机
dbContext.Remove(wcsTask); dbContext.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask); WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.objid = StaticData.SnowId.NextId(); newTask.objid = StaticData.SnowId.NextId();
@ -236,6 +237,8 @@ namespace Khd.Core.Wcs.Wcs
newTask.nextPointNo = nextEquip.equipNo; newTask.nextPointNo = nextEquip.equipNo;
newTask.currPointId = baseEquip.objid; newTask.currPointId = baseEquip.objid;
newTask.currPointNo = baseEquip.equipNo; newTask.currPointNo = baseEquip.equipNo;
newTask.endPointId = endEquip.objid;
newTask.endPointNo = endEquip.equipNo;
newTask.ud1 = 30; newTask.ud1 = 30;
newTask.fromFloorNo = FloorNo; newTask.fromFloorNo = FloorNo;
newTask.taskType = 6;//成品出库 newTask.taskType = 6;//成品出库

@ -872,6 +872,16 @@ namespace Khd.Core.Wcs.Wcs
var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == item.currPointNo); var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == item.currPointNo);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First(); WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First();
WmsBaseLocation toLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).First(); WmsBaseLocation toLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).First();
wmsBaseLocation.ContainerStatus = null;
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.locationStatus = "1";
dbContext.SaveChanges();
toLocation.locationStatus = "1";
toLocation.containerCode = item.containerNo;
toLocation.updateTime = DateTime.Now;
dbContext.SaveChanges();
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext); SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
SystemData.UnLockOutLocation(toLocation, dbContext); SystemData.UnLockOutLocation(toLocation, dbContext);
if (wmsProductStock != null) if (wmsProductStock != null)
@ -879,18 +889,8 @@ namespace Khd.Core.Wcs.Wcs
wmsProductStock.locationCode = item.endPointNo; wmsProductStock.locationCode = item.endPointNo;
dbContext.Update(wmsProductStock); dbContext.Update(wmsProductStock);
} }
dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).Update(t => new WmsBaseLocation
{
locationStatus = "1",
containerCode = null,
updateTime = DateTime.Now
});
dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).Update(t => new WmsBaseLocation
{
locationStatus = "1",
containerCode = item.endPointNo,
updateTime = DateTime.Now
});
dbContext.Remove(item); dbContext.Remove(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
@ -948,9 +948,8 @@ namespace Khd.Core.Wcs.Wcs
dbContext.WmsMoveDetail.Add(wmsMoveDetail); dbContext.WmsMoveDetail.Add(wmsMoveDetail);
#endregion #endregion
transaction.Commit();
dbContext.SaveChanges(); dbContext.SaveChanges();
transaction.Commit();
SystemData.SendPlcLocation(wmsBaseLocation); SystemData.SendPlcLocation(wmsBaseLocation);
SystemData.SendPlcLocation(toLocation); SystemData.SendPlcLocation(toLocation);

@ -578,6 +578,16 @@ namespace Khd.Core.Wcs.Wcs
var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.currPointNo).FirstOrDefault(); var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.currPointNo).FirstOrDefault();
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First(); WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First();
WmsBaseLocation toLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).First(); WmsBaseLocation toLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).First();
wmsBaseLocation.ContainerStatus = null;
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.locationStatus = "1";
dbContext.SaveChanges();
toLocation.locationStatus = "1";
toLocation.containerCode = item.containerNo;
toLocation.updateTime=DateTime.Now;
dbContext.SaveChanges();
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext); SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
SystemData.UnLockOutLocation(toLocation, dbContext); SystemData.UnLockOutLocation(toLocation, dbContext);
if (wmsRawStock != null) if (wmsRawStock != null)
@ -585,18 +595,8 @@ namespace Khd.Core.Wcs.Wcs
wmsRawStock.locationCode = item.endPointNo; wmsRawStock.locationCode = item.endPointNo;
dbContext.Update(wmsRawStock); dbContext.Update(wmsRawStock);
} }
dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).Update(t => new WmsBaseLocation
{
locationStatus = "1",
containerCode = null,
updateTime = DateTime.Now
});
dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).Update(t => new WmsBaseLocation
{
locationStatus = "1",
containerCode = item.containerNo,
updateTime = DateTime.Now
});
dbContext.Remove(item); dbContext.Remove(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 }); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
@ -654,7 +654,6 @@ namespace Khd.Core.Wcs.Wcs
dbContext.WmsMoveDetail.Add(wmsMoveDetail); dbContext.WmsMoveDetail.Add(wmsMoveDetail);
#endregion #endregion
dbContext.SaveChanges(); dbContext.SaveChanges();
transaction.Commit(); transaction.Commit();
SystemData.SendPlcLocation(wmsBaseLocation); SystemData.SendPlcLocation(wmsBaseLocation);

@ -203,6 +203,7 @@ namespace Khd.Core.Wcs.Wcs
else if (wcsTask.taskStatus == 6)//小车任务是完成状态,说明是出库 else if (wcsTask.taskStatus == 6)//小车任务是完成状态,说明是出库
{ {
BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.equipType == 2);//提升机 BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.equipType == 2);//提升机
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.floorNo);
dbContext.Remove(wcsTask); dbContext.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask); WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.objid = StaticData.SnowId.NextId(); newTask.objid = StaticData.SnowId.NextId();
@ -212,6 +213,8 @@ namespace Khd.Core.Wcs.Wcs
newTask.currPointId = baseEquip.objid; newTask.currPointId = baseEquip.objid;
newTask.currPointNo = baseEquip.equipNo; newTask.currPointNo = baseEquip.equipNo;
newTask.fromFloorNo = FloorNo; newTask.fromFloorNo = FloorNo;
newTask.endPointId= endEquip.objid;
newTask.endPointNo = endEquip.equipNo;
newTask.taskStatus = 0; newTask.taskStatus = 0;
newTask.ud1 = 10; newTask.ud1 = 10;
newTask.updateTime = DateTime.Now; newTask.updateTime = DateTime.Now;

@ -6,6 +6,7 @@
xmlns:local="clr-namespace:Khd.Core.Wpf.myConverter" xmlns:local="clr-namespace:Khd.Core.Wpf.myConverter"
mc:Ignorable="d" mc:Ignorable="d"
WindowStyle="None" WindowStyle="None"
Closing="Window_Closing"
WindowStartupLocation="CenterOwner" WindowStartupLocation="CenterOwner"
xmlns:hc="https://handyorg.github.io/handycontrol" xmlns:hc="https://handyorg.github.io/handycontrol"
WindowState="Maximized" WindowState="Maximized"
@ -2348,16 +2349,15 @@ FontSize="25" Width="160" Height="80" VerticalAlignment="Top" HorizontalAlignmen
<RowDefinition Height="*"/> <RowDefinition Height="*"/>
<RowDefinition Height="*"/> <RowDefinition Height="*"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Border BorderBrush="White" BorderThickness="2" Grid.ColumnSpan="1" Grid.Column="4" Grid.RowSpan="2" Margin="20 0 0 0"> <Border BorderBrush="White" BorderThickness="2" Grid.ColumnSpan="1" Width="150" Grid.Column="4" Grid.RowSpan="2" Margin="20 0 0 0">
<StackPanel Orientation="Vertical" > <StackPanel Orientation="Vertical" >
<TextBlock x:Name="OutOrder" Text="待出库:" Background="Transparent" Grid.ColumnSpan="2" Grid.RowSpan="2" VerticalAlignment="Top" HorizontalAlignment="Center"/> <TextBlock x:Name="OutOrder" Text="待出库:" Background="Transparent" Grid.ColumnSpan="2" Grid.RowSpan="2" VerticalAlignment="Top" HorizontalAlignment="Center"/>
<TextBlock x:Name="thisOutEndStation" Background="Transparent" Grid.ColumnSpan="2" Grid.RowSpan="2" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="0,20,0,0"/>
<ListBox x:Name='OutEndStations' HorizontalAlignment="Center" Background="Transparent" Foreground="White"> <ListBox x:Name='OutEndStations' HorizontalAlignment="Center" Background="Transparent" Foreground="White">
<ListBox.ItemTemplate> <ListBox.ItemTemplate>
<DataTemplate> <DataTemplate>
<Grid> <Grid>
<TextBlock Text="{Binding EndStationName}" Foreground="{Binding ForeColor}" FontSize="18"/> <TextBlock Text="{Binding EndStationName}" Foreground="{Binding ForeColor}" FontSize="25"/>
</Grid> </Grid>
</DataTemplate> </DataTemplate>
</ListBox.ItemTemplate> </ListBox.ItemTemplate>
@ -2519,7 +2519,7 @@ FontSize="25" Width="160" Height="80" VerticalAlignment="Top" HorizontalAlignmen
<Grid> <Grid>
<hc:TextBox hc:InfoElement.ShowClearButton="True" IsReadOnly="True" x:Name="outMaterialNameTxt" FontSize="50" LostFocus="txtOutBox_TextChanged" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="80" Grid.Row="2" Grid.Column="3" Grid.ColumnSpan="3"/> <hc:TextBox hc:InfoElement.ShowClearButton="True" IsReadOnly="True" x:Name="outMaterialNameTxt" FontSize="50" LostFocus="txtOutBox_TextChanged" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="80" Grid.Row="2" Grid.Column="3" Grid.ColumnSpan="3"/>
</Grid> </Grid>
<Button Content="确认出库" Grid.Column="4" Grid.Row="3" Grid.ColumnSpan="2" Width="400" Height="100" Margin="100,0,0,0" FontSize="35" Background="#346DFF" Foreground="White" Click="OutRawBaseLocaltion_Click"/>
</StackPanel> </StackPanel>
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Grid.Row="3" Grid.ColumnSpan="6"> <StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Grid.Row="3" Grid.ColumnSpan="6">
<TextBlock Text="物料规格:" Width="280" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="50"/> <TextBlock Text="物料规格:" Width="280" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="50"/>
@ -2527,7 +2527,8 @@ FontSize="25" Width="160" Height="80" VerticalAlignment="Top" HorizontalAlignmen
<hc:TextBox hc:InfoElement.ShowClearButton="True" IsReadOnly="True" x:Name="outMaterialSpecTxt" FontSize="50" LostFocus="txtOutBarCode_TextChanged" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="80" Grid.Row="3" Grid.Column="3" Grid.ColumnSpan="3"/> <hc:TextBox hc:InfoElement.ShowClearButton="True" IsReadOnly="True" x:Name="outMaterialSpecTxt" FontSize="50" LostFocus="txtOutBarCode_TextChanged" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="80" Grid.Row="3" Grid.Column="3" Grid.ColumnSpan="3"/>
</Grid> </Grid>
<Button Content="确认出库" Grid.Column="4" Grid.Row="5" Grid.ColumnSpan="2" Width="400" Height="100" Margin="100,0,0,0" FontSize="35" Background="#346DFF" Foreground="White" Click="OutRawBaseLocaltion_Click"/> <Button Content="背负式小车捡料完成" Grid.Column="4" Grid.Row="6" Grid.ColumnSpan="2" Width="400" Height="100" Margin="100,0,0,0" FontSize="35" Background="#346DFF" Foreground="White" Click="btnBearConfirmBox_Click"/>
</StackPanel> </StackPanel>
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Grid.Row="4" Grid.ColumnSpan="6"> <StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Grid.Row="4" Grid.ColumnSpan="6">
<TextBlock Text="库存:" Grid.Row="4" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="50"/> <TextBlock Text="库存:" Grid.Row="4" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="50"/>
@ -2539,7 +2540,7 @@ FontSize="25" Width="160" Height="80" VerticalAlignment="Top" HorizontalAlignmen
<Grid> <Grid>
<hc:TextBox x:Name="txtOutScan" Margin="0,0,0,0" FontSize="50" Width="300" HorizontalAlignment="Left" VerticalAlignment="Center" Height="80" Grid.Row="4" Grid.Column="3" Grid.ColumnSpan="3" KeyDown="OutEnter" /> <hc:TextBox x:Name="txtOutScan" Margin="0,0,0,0" FontSize="50" Width="300" HorizontalAlignment="Left" VerticalAlignment="Center" Height="80" Grid.Row="4" Grid.Column="3" Grid.ColumnSpan="3" KeyDown="OutEnter" />
</Grid> </Grid>
<Button Content="背负式小车捡料完成" Grid.Column="4" Grid.Row="6" Grid.ColumnSpan="2" Width="400" Height="100" Margin="100,0,0,0" FontSize="35" Background="#346DFF" Foreground="White" Click="btnBearConfirmBox_Click"/> <Button Content="创建背负小车任务" Grid.Column="4" Grid.Row="6" Grid.ColumnSpan="2" Width="400" Height="100" Margin="100,0,0,0" FontSize="35" Background="#346DFF" Foreground="White" Click="createBearConfirmBox_Click"/>
</StackPanel> </StackPanel>

@ -19,6 +19,7 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Tokens;
using Newtonsoft.Json; using Newtonsoft.Json;
using SixLabors.ImageSharp.Drawing;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
@ -481,7 +482,7 @@ namespace Khd.Core.Wpf.Form
saleOrderId = t.Key.saleOrderId, saleOrderId = t.Key.saleOrderId,
thisOutAmount = t.Sum(x => x.totalAmount) - t.Sum(x => x.frozenAmount) thisOutAmount = t.Sum(x => x.totalAmount) - t.Sum(x => x.frozenAmount)
}); });
List<WmsRawReturn> endStationCodeOutRaw = wmsRawReturns.Where(t => t.endStationCode == baseEquip.endStationCode).ToList(); List<WmsRawReturn> endStationCodeOutRaw = wmsRawReturns.Where(t => baseEquip.endStationCode.Contains(t.endStationCode)).ToList();
List<long?> materialIds = endStationCodeOutRaw.Select(t => t.materialId).ToList(); List<long?> materialIds = endStationCodeOutRaw.Select(t => t.materialId).ToList();
List<MesBaseMaterialInfo> mesBaseMaterialInfos = dbContext.MesBaseMaterialInfo.Where(t => materialIds.Contains(t.MaterialId)).ToList(); List<MesBaseMaterialInfo> mesBaseMaterialInfos = dbContext.MesBaseMaterialInfo.Where(t => materialIds.Contains(t.MaterialId)).ToList();
var bill = endStationCodeOutRaw.GroupBy(t => new { t.materialId }) var bill = endStationCodeOutRaw.GroupBy(t => new { t.materialId })
@ -550,10 +551,10 @@ namespace Khd.Core.Wpf.Form
{ {
this.OutEndStations.ItemsSource = null; this.OutEndStations.ItemsSource = null;
this.OutEndStations.Items.Clear(); this.OutEndStations.Items.Clear();
this.OutEndStations.ItemsSource = list.Distinct().Select(t => new this.OutEndStations.ItemsSource = list.Distinct().OrderBy(t => t).Select(t => new
{ {
EndStationName = t, EndStationName = t,
ForeColor = baseEquip.endStationCode == null ? Brushes.Black : baseEquip.endStationCode.Contains(t) ? Brushes.Green : Brushes.Black ForeColor = baseEquip.endStationCode == null ? Brushes.Black : baseEquip.endStationCode.Contains(t) ? Brushes.Red : Brushes.Black
}); });
this.OutEndStations.Items.Refresh(); this.OutEndStations.Items.Refresh();
}); });
@ -1566,32 +1567,37 @@ namespace Khd.Core.Wpf.Form
{ {
if (count > 0) if (count > 0)
{ {
MessageBoxResult messageBoxResult1 = HandyControl.Controls.MessageBox.Show("是否需要背负式小车返回", "提示信息", MessageBoxButton.YesNoCancel, MessageBoxImage.Information); MessageBoxResult messageBoxResult1 = HandyControl.Controls.MessageBox.Show("本次出库任务是否捡料完成", "提示信息", MessageBoxButton.YesNo, MessageBoxImage.Information);
if (messageBoxResult1 == MessageBoxResult.Yes) if (messageBoxResult1 == MessageBoxResult.Yes)
{ {
BaseEquip baseEquip = dbContext.BaseEquip.Where(t => t.objid == 10).First();
List<string>? list = JsonConvert.DeserializeObject<List<string>>(baseEquip.endStationCode);
new SelectOutRawForm(_host, "", 3, list).ShowDialog();
if (string.IsNullOrEmpty(SelectOutRawForm.StationCode))
{
return;
} }
else //MessageBoxResult messageBoxResult1 = HandyControl.Controls.MessageBox.Show("是否需要背负式小车返回?", "提示信息", MessageBoxButton.YesNoCancel, MessageBoxImage.Information);
{ //if (messageBoxResult1 == MessageBoxResult.Yes)
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.equipNo == SelectOutRawForm.StationCode); //{
WcsTask wcsTask = CoreMapper.Map<WcsTask>(wcsCmd); // BaseEquip baseEquip = dbContext.BaseEquip.Where(t => t.objid == 10).First();
wcsTask.taskStatus = 0; // List<string>? list = JsonConvert.DeserializeObject<List<string>>(baseEquip.endStationCode);
wcsTask.createTime = DateTime.Now; // new SelectOutRawForm(_host, "", 3, list).ShowDialog();
wcsTask.useFlag = 1; // if (string.IsNullOrEmpty(SelectOutRawForm.StationCode))
wcsTask.objid = Global.SnowId.NextId(); // {
wcsTask.endPointId = endEquip.objid; // return;
wcsTask.endPointNo = endEquip.equipNo; // }
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask); // else
dbContext.Add(wcsTaskLog); // {
dbContext.Add(wcsTask); // BaseEquip endEquip = dbContext.BaseEquip.First(t => t.equipNo == SelectOutRawForm.StationCode);
} // WcsTask wcsTask = CoreMapper.Map<WcsTask>(wcsCmd);
} // wcsTask.taskStatus = 0;
else // wcsTask.createTime = DateTime.Now;
// wcsTask.useFlag = 1;
// wcsTask.objid = Global.SnowId.NextId();
// wcsTask.endPointId = endEquip.objid;
// wcsTask.endPointNo = endEquip.equipNo;
// WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
// dbContext.Add(wcsTaskLog);
// dbContext.Add(wcsTask);
// }
//}
//else
{ {
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 10); BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 10);
baseEquip.endStationCode = string.Empty; baseEquip.endStationCode = string.Empty;
@ -1608,7 +1614,6 @@ namespace Khd.Core.Wpf.Form
baseEquip.ud3 = null; baseEquip.ud3 = null;
dbContext.Update(baseEquip); dbContext.Update(baseEquip);
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
if (wcsCmd.taskStatus == 3) if (wcsCmd.taskStatus == 3)
@ -2688,12 +2693,6 @@ namespace Khd.Core.Wpf.Form
{ {
using var scope = _host.Services.CreateScope(); using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>(); using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 10);
if (!string.IsNullOrEmpty(txtOutBox.Text) && !string.IsNullOrEmpty(txtOutBarCode.Text))
{
var wmsRawStock = dbContext.WmsRawStock var wmsRawStock = dbContext.WmsRawStock
.FirstOrDefault(t => t.instockBatch == txtOutBarCode.Text && t.palletInfoCode == txtOutBox.Text); .FirstOrDefault(t => t.instockBatch == txtOutBarCode.Text && t.palletInfoCode == txtOutBox.Text);
if (wmsRawStock == null) if (wmsRawStock == null)
@ -2707,79 +2706,91 @@ namespace Khd.Core.Wpf.Form
scanOutMsg.Text = "出库数量不能大于库存数量!"; scanOutMsg.Text = "出库数量不能大于库存数量!";
return; return;
} }
var wcsTask = dbContext.WcsTask.Where(t => t.containerNo == txtOutBox.Text).FirstOrDefault(); BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 10);
if (wcsTask == null) if (!string.IsNullOrEmpty(txtOutBox.Text) && !string.IsNullOrEmpty(txtOutBarCode.Text))
{
scanOutMsg.Text = "出库失败非CTU出库任务无法出库!";
return;
}
else
{ {
var mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == txtOutBarCode.Text); var mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == txtOutBarCode.Text);
if (mesBaseBarcodeInfo != null) if (mesBaseBarcodeInfo != null)
{ {
WmsRawOutstock? wmsRawOutstock = dbContext.WmsRawOutstock var list = JsonConvert.DeserializeObject<List<string>>(baseEquip.endStationCode);
.Where(t => t.materialId == mesBaseBarcodeInfo.materialId && t.realOutstockAmount < t.outstockAmount && t.saleOrderId == (mesBaseBarcodeInfo.saleOrderId == null ? 0 : mesBaseBarcodeInfo.saleOrderId) && t.endStationCode == baseEquip.endStationCode).FirstOrDefault(); var wmsRawOutstocks = dbContext.WmsRawOutstock
if (wmsRawOutstock != null) .Where(t => t.materialId == mesBaseBarcodeInfo.materialId && t.realOutstockAmount < t.outstockAmount && t.saleOrderId == (mesBaseBarcodeInfo.saleOrderId == null ? 0 : mesBaseBarcodeInfo.saleOrderId) && baseEquip.endStationCode.Contains(t.endStationCode))
.ToList();
if (wmsRawOutstocks.Count > 0)
{ {
wmsRawOutstock.realOutstockAmount += outScan; int index = 0;
if (wmsRawOutstock.outstockAmount == wmsRawOutstock.realOutstockAmount) var sort = list.Select(t => new
{ {
wmsRawOutstock.executeStatus = "2"; stationCode = t,
} index = index++
else if (wmsRawOutstock.realOutstockAmount > wmsRawOutstock.outstockAmount) });
wmsRawOutstocks = wmsRawOutstocks.OrderBy(t => sort.FirstOrDefault(s => s.stationCode == t.endStationCode) != null ? sort.FirstOrDefault(s => s.stationCode == t.endStationCode).index : 99).ToList();
decimal? sum = wmsRawOutstocks.Sum(t => (t.outstockAmount - t.realOutstockAmount));
if (outScan > sum)
{ {
scanOutMsg.Text = "出库数量不能大于申请单数量,当前出库数量为:" + (wmsRawOutstock.realOutstockAmount - outScan) + ",申请单数量为:" + wmsRawOutstock.outstockAmount + "!"; scanOutMsg.Text = "出库数量不能大于当前出库的订单的数量";
return; return;
} }
wmsRawStock.totalAmount -= outScan; foreach (var item in wmsRawOutstocks)
{
decimal outAmount = 0;
if (item.outstockAmount - item.realOutstockAmount > outScan)
{
item.realOutstockAmount += outScan;
outAmount += outScan;
}
else
{
outScan -= (item.outstockAmount - item.realOutstockAmount.Value);
outAmount = item.outstockAmount - item.realOutstockAmount.Value;
item.realOutstockAmount = item.outstockAmount;
item.executeStatus = "2";
item.endTime = DateTime.Now;
}
if (wmsRawStock.totalAmount <= 0) if (wmsRawStock.totalAmount <= 0)
{ {
dbContext.Remove(wmsRawStock); dbContext.Remove(wmsRawStock);
dbContext.Update(wmsRawOutstock);
} }
else else
{ {
dbContext.Update(wmsRawStock); dbContext.Update(wmsRawStock);
dbContext.Update(wmsRawOutstock);
} }
if (mesBaseBarcodeInfo != null) wmsRawStock.totalAmount -= outAmount;
if (wmsRawStock.totalAmount == 0)
{ {
dbContext.WmsRawStock.Remove(wmsRawStock);
}
else
{
dbContext.WmsRawStock.Update(wmsRawStock);
}
WmsRawOutstockDetail wmsProductOutstockDetail = new WmsRawOutstockDetail() WmsRawOutstockDetail wmsProductOutstockDetail = new WmsRawOutstockDetail()
{ {
rawOutstockDetailId = Global.SnowId.NextId(), rawOutstockDetailId = Global.SnowId.NextId(),
rawOutstockId = wmsRawOutstock.rawOutstockId, rawOutstockId = item.rawOutstockId,
materialId = mesBaseBarcodeInfo.materialId, materialId = mesBaseBarcodeInfo.materialId,
createDate = DateTime.Now, createDate = DateTime.Now,
createBy = "WCS", createBy = "WCS",
taskCode = wcsTask.objid.ToString(),
executeStatus = "2", executeStatus = "2",
locationCode = wcsTask.currPointNo, locationCode = wmsRawStock.locationCode,
outstockAmount = outScan, outstockAmount = outScan,
planAmount = outScan, planAmount = item.outstockAmount,
warehouseId = 512, warehouseId = 512,
materialBarcode = mesBaseBarcodeInfo.barcodeInfo, materialBarcode = mesBaseBarcodeInfo.barcodeInfo,
instockBatch = mesBaseBarcodeInfo.batchCode, instockBatch = mesBaseBarcodeInfo.batchCode,
stackAmount = outScan, stackAmount = mesBaseBarcodeInfo.batchFlag == "1" ? mesBaseBarcodeInfo.amount : 1,
outstockPerson = "WCS", outstockPerson = "WCS",
outstockTime = DateTime.Now, outstockTime = DateTime.Now,
outstockWay = "2", outstockWay = "2",
materialProductionDate = mesBaseBarcodeInfo.productionDate materialProductionDate = mesBaseBarcodeInfo.productionDate
}; };
dbContext.WmsRawOutstockDetail.Add(wmsProductOutstockDetail); dbContext.Add(wmsProductOutstockDetail);
} dbContext.Update(item);
dbContext.SaveChanges(); dbContext.SaveChanges();
} }
}
else else
{ {
// 没有申请单
// 如果选中了出库单,并且无需要出库的申请单,则禁止出库
//if (!string.IsNullOrEmpty(baseEquip.endStationCode))
//{
// scanOutMsg.Text = "申请单里该条码无需出库!";
// return;
//}
if (wmsRawStock.safeFlag != "1") if (wmsRawStock.safeFlag != "1")
{ {
scanOutMsg.Text = "该条码不是安全库存,且无申请单,禁止出库!"; scanOutMsg.Text = "该条码不是安全库存,且无申请单,禁止出库!";
@ -2803,11 +2814,11 @@ namespace Khd.Core.Wpf.Form
WmsRawOutstock newWmsRawOutstock = new WmsRawOutstock(); WmsRawOutstock newWmsRawOutstock = new WmsRawOutstock();
newWmsRawOutstock.taskCode = timeStamp + "CTU" + Random.Shared.Next(10, 99); newWmsRawOutstock.taskCode = timeStamp + "CTU" + Random.Shared.Next(10, 99);
newWmsRawOutstock.warehouseId = 512; newWmsRawOutstock.warehouseId = 512;
newWmsRawOutstock.locationCode = wcsTask.currPointNo; newWmsRawOutstock.locationCode = wmsRawStock.locationCode;
newWmsRawOutstock.stationId = 512; newWmsRawOutstock.stationId = 512;
newWmsRawOutstock.materialId = mesBaseBarcodeInfo.materialId; newWmsRawOutstock.materialId = mesBaseBarcodeInfo.materialId;
newWmsRawOutstock.materialBatch = mesBaseBarcodeInfo.barcodeInfo; newWmsRawOutstock.materialBatch = mesBaseBarcodeInfo.barcodeInfo;
newWmsRawOutstock.palletInfoCode = wcsTask.containerNo; newWmsRawOutstock.palletInfoCode = wmsRawStock.palletInfoCode;
newWmsRawOutstock.outstockAmount = outScan; newWmsRawOutstock.outstockAmount = outScan;
newWmsRawOutstock.realOutstockAmount = outScan; newWmsRawOutstock.realOutstockAmount = outScan;
newWmsRawOutstock.operationType = "1"; newWmsRawOutstock.operationType = "1";
@ -2863,29 +2874,215 @@ namespace Khd.Core.Wpf.Form
return; return;
} }
} }
scanOutMsg.Text = "出库成功!";
txtOutScan.Text = string.Empty;
txtOutBarCode.Text = string.Empty;
outMaterialSpecTxt.Text = string.Empty;
outMaterialNameTxt.Text = string.Empty;
txtOutBox.Text = string.Empty;
txtOutBox.Focus();
}
else
{
scanOutMsg.Text = "未查询到该条码信息!";
}
} }
} }
else else
{ {
scanOutMsg.Text = "请先扫描容器号和条码!"; scanOutMsg.Text = "请先扫描容器号和条码!";
} }
#region 原逻辑
//if (!string.IsNullOrEmpty(txtOutBox.Text) && !string.IsNullOrEmpty(txtOutBarCode.Text))
//{
// var wmsRawStock = dbContext.WmsRawStock
// .FirstOrDefault(t => t.instockBatch == txtOutBarCode.Text && t.palletInfoCode == txtOutBox.Text);
// if (wmsRawStock == null)
// {
// scanOutMsg.Text = "库存已经被清空!";
// return;
// }
// decimal outScan = Convert.ToDecimal(this.txtOutScan.Text);
// if (outScan > wmsRawStock.totalAmount - wmsRawStock.frozenAmount)
// {
// scanOutMsg.Text = "出库数量不能大于库存数量!";
// return;
// }
// var wcsTask = dbContext.WcsTask.Where(t => t.containerNo == txtOutBox.Text).FirstOrDefault();
// if (wcsTask == null)
// {
// scanOutMsg.Text = "出库失败非CTU出库任务无法出库!";
// return;
// }
// else
// {
// var mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == txtOutBarCode.Text);
// if (mesBaseBarcodeInfo != null)
// {
// var list = JsonConvert.DeserializeObject<List<string>>(baseEquip.endStationCode);
// var wmsRawOutstocks = dbContext.WmsRawOutstock
// .Where(t => t.materialId == mesBaseBarcodeInfo.materialId && t.realOutstockAmount < t.outstockAmount && t.saleOrderId == (mesBaseBarcodeInfo.saleOrderId == null ? 0 : mesBaseBarcodeInfo.saleOrderId) && baseEquip.endStationCode.Contains(t.endStationCode))
// .ToList();
// WmsRawOutstock wmsRawOutstock = null;
// foreach (var item in list)
// {
// wmsRawOutstock ??= wmsRawOutstocks.Where(t => t.endStationCode == item).FirstOrDefault();
// }
// if (wmsRawOutstock != null)
// {
// wmsRawOutstock.realOutstockAmount += outScan;
// if (wmsRawOutstock.outstockAmount == wmsRawOutstock.realOutstockAmount)
// {
// wmsRawOutstock.executeStatus = "2";
// }
// else if (wmsRawOutstock.realOutstockAmount > wmsRawOutstock.outstockAmount)
// {
// scanOutMsg.Text = "出库数量不能大于申请单数量,当前出库数量为:" + (wmsRawOutstock.realOutstockAmount - outScan) + ",申请单数量为:" + wmsRawOutstock.outstockAmount + "!";
// return;
// }
// wmsRawStock.totalAmount -= outScan;
// if (wmsRawStock.totalAmount <= 0)
// {
// dbContext.Remove(wmsRawStock);
// dbContext.Update(wmsRawOutstock);
// }
// else
// {
// dbContext.Update(wmsRawStock);
// dbContext.Update(wmsRawOutstock);
// }
// if (mesBaseBarcodeInfo != null)
// {
// WmsRawOutstockDetail wmsProductOutstockDetail = new WmsRawOutstockDetail()
// {
// rawOutstockDetailId = Global.SnowId.NextId(),
// rawOutstockId = wmsRawOutstock.rawOutstockId,
// materialId = mesBaseBarcodeInfo.materialId,
// createDate = DateTime.Now,
// createBy = "WCS",
// taskCode = wcsTask.objid.ToString(),
// executeStatus = "2",
// locationCode = wcsTask.currPointNo,
// outstockAmount = outScan,
// planAmount = outScan,
// warehouseId = 512,
// materialBarcode = mesBaseBarcodeInfo.barcodeInfo,
// instockBatch = mesBaseBarcodeInfo.batchCode,
// stackAmount = outScan,
// outstockPerson = "WCS",
// outstockTime = DateTime.Now,
// outstockWay = "2",
// materialProductionDate = mesBaseBarcodeInfo.productionDate
// };
// dbContext.WmsRawOutstockDetail.Add(wmsProductOutstockDetail);
// }
// dbContext.SaveChanges();
// }
// else
// {
// // 没有申请单
// // 如果选中了出库单,并且无需要出库的申请单,则禁止出库
// //if (!string.IsNullOrEmpty(baseEquip.endStationCode))
// //{
// // scanOutMsg.Text = "申请单里该条码无需出库!";
// // return;
// //}
// if (wmsRawStock.safeFlag != "1")
// {
// scanOutMsg.Text = "该条码不是安全库存,且无申请单,禁止出库!";
// return;
// }
// if (mesBaseBarcodeInfo.PurchaseOrderId == null)
// {
// wmsRawStock.totalAmount -= outScan;
// if (wmsRawStock.totalAmount == 0)
// {
// dbContext.WmsRawStock.Remove(wmsRawStock);
// }
// else
// {
// dbContext.WmsRawStock.Update(wmsRawStock);
// }
// #region 插入rawOutstock
// string timeStamp = DateTime.Now.ToString("yyyyMMddHHmmss");
// WmsRawOutstock newWmsRawOutstock = new WmsRawOutstock();
// newWmsRawOutstock.taskCode = timeStamp + "CTU" + Random.Shared.Next(10, 99);
// newWmsRawOutstock.warehouseId = 512;
// newWmsRawOutstock.locationCode = wcsTask.currPointNo;
// newWmsRawOutstock.stationId = 512;
// newWmsRawOutstock.materialId = mesBaseBarcodeInfo.materialId;
// newWmsRawOutstock.materialBatch = mesBaseBarcodeInfo.barcodeInfo;
// newWmsRawOutstock.palletInfoCode = wcsTask.containerNo;
// newWmsRawOutstock.outstockAmount = outScan;
// newWmsRawOutstock.realOutstockAmount = outScan;
// newWmsRawOutstock.operationType = "1";
// newWmsRawOutstock.taskType = "1";
// newWmsRawOutstock.auditStatus = "1";
// newWmsRawOutstock.applyBy = "CtuGun";
// newWmsRawOutstock.applyDate = DateTime.Now;
// newWmsRawOutstock.executeStatus = "2";
// newWmsRawOutstock.saleOrderId = mesBaseBarcodeInfo.saleOrderId;
// newWmsRawOutstock.updateDate = DateTime.Now;
// newWmsRawOutstock.beginTime = DateTime.Now;
// newWmsRawOutstock.endTime = DateTime.Now;
// dbContext.WmsRawOutstock.Add(newWmsRawOutstock);
// dbContext.SaveChanges();
// #endregion
// //if (mesBaseBarcodeInfo != null)
// //{
// // WmsRawOutstockDetail wmsProductOutstockDetail = new WmsRawOutstockDetail()
// // {
// // rawOutstockDetailId = Global.SnowId.NextId(),
// // rawOutstockId = 0,
// // materialId = mesBaseBarcodeInfo.materialId,
// // createDate = DateTime.Now,
// // createBy = "WCS",
// // taskCode = wcsTask.objid.ToString(),
// // executeStatus = "2",
// // locationCode = wcsTask.currPointNo,
// // outstockAmount = outScan,
// // planAmount = outScan,
// // warehouseId = 512,
// // materialBarcode = mesBaseBarcodeInfo.barcodeInfo,
// // instockBatch = mesBaseBarcodeInfo.batchCode,
// // stackAmount = outScan,
// // outstockPerson = "WCS",
// // outstockTime = DateTime.Now,
// // outstockWay = "2",
// // materialProductionDate = mesBaseBarcodeInfo.productionDate
// // };
// // dbContext.WmsRawOutstockDetail.Add(wmsProductOutstockDetail);
// //}
// // dbContext.SaveChanges();
// }
// else
// {
// scanOutMsg.Text = "该条码的销售订单不正确";
// txtOutScan.Text = string.Empty;
// txtOutBarCode.Text = string.Empty;
// outMaterialSpecTxt.Text = string.Empty;
// outMaterialNameTxt.Text = string.Empty;
// txtOutBox.Text = string.Empty;
// txtOutBox.Focus();
// return;
// }
// }
// scanOutMsg.Text = "出库成功!";
// txtOutScan.Text = string.Empty;
// txtOutBarCode.Text = string.Empty;
// outMaterialSpecTxt.Text = string.Empty;
// outMaterialNameTxt.Text = string.Empty;
// txtOutBox.Text = string.Empty;
// txtOutBox.Focus();
// }
// else
// {
// scanOutMsg.Text = "未查询到该条码信息!";
// }
// }
//}
//else
//{
// scanOutMsg.Text = "请先扫描容器号和条码!";
//}
#endregion
} }
catch (Exception ex) catch (Exception ex)
{ {
MessageBox.Show(ex.Message);
} }
} }
/// <summary> /// <summary>
@ -5257,6 +5454,72 @@ namespace Khd.Core.Wpf.Form
{ {
DrawLocaitons(); DrawLocaitons();
} }
private void Window_Closing(object sender, CancelEventArgs e)
{
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动
p.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息
p.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息
p.StartInfo.RedirectStandardError = true;//重定向标准错误输出
p.StartInfo.CreateNoWindow = true;//不显示程序窗口
p.Start();//启动程序
//向cmd窗口发送输入信息
p.StandardInput.WriteLine("taskkill /f /im Khd.Core.Wpf.exe" + "&exit");
p.StandardInput.WriteLine("taskkill /f /im Khd.Core.Wpf" + "&exit");
}
private void createBearConfirmBox_Click(object sender, RoutedEventArgs e)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
SelectOutRawForm selectOutRawForm = new SelectOutRawForm(this._host, "", 4);
selectOutRawForm.ShowDialog();
if (string.IsNullOrEmpty(SelectOutRawForm.StationCode))
{
return;
}
else
{
bool hasTask = dbContext.WcsTask.Where(t => t.nextPointId == 10).Any();
bool hasTaskManual = dbContext.WcsTaskManual.Where(t => t.nextPointId == 10).Any();
if (hasTask || hasTaskManual)
{
MessageBox.Show("已经有任务了");
return;
}
BaseEquip startStationEquip = dbContext.BaseEquip.First(t => t.objid == 21);
BaseEquip bearAgvEquip = dbContext.BaseEquip.First(t => t.objid == 10);
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.equipNo == SelectOutRawForm.StationCode);
WcsTask bearAgvTask = new()
{
objid = _jcSnowId.NextId(),
taskType = 32,
containerNo = null,
currPointId = startStationEquip.objid,
currPointNo = startStationEquip.equipNo,
nextPointId = bearAgvEquip.objid,
nextPointNo = bearAgvEquip.equipNo,
endPointId = endEquip.objid,
endPointNo = endEquip.equipNo,
taskStatus = 0,
createTime = DateTime.Now,
createBy = "WCS",
qty = 1,
useFlag = 1,
equipmentNo = startStationEquip.equipNo,
remark = "组装出库",
floorNo = 5,
fromFloorNo = 5,
};
dbContext.Add(bearAgvTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(bearAgvTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
}
}
} }
} }

@ -43,7 +43,7 @@ namespace Khd.Core.Wpf.TaskForm
} }
else else
{ {
if (_isOut == 3) if (_isOut == 3||_isOut == 4)
{ {
StationCode = this.endStationCode.SelectedItem.ToString(); StationCode = this.endStationCode.SelectedItem.ToString();
} }
@ -93,6 +93,10 @@ namespace Khd.Core.Wpf.TaskForm
else else
{ {
List<string> endStationCodes = SystemData.BaseEquip.Where(t => t.equipType == 10).Select(t => t.agvPositionCode).ToList(); List<string> endStationCodes = SystemData.BaseEquip.Where(t => t.equipType == 10).Select(t => t.agvPositionCode).ToList();
if (_isOut == 4)
{
_endStationCodes= endStationCodes;
}
using var scope = _host.Services.CreateScope(); using var scope = _host.Services.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>(); var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var hasTask = dbContext.WcsTask.Where(t => (t.nextPointId == 11 && t.taskType == 30) || t.nextPointId == 10).Any(); var hasTask = dbContext.WcsTask.Where(t => (t.nextPointId == 11 && t.taskType == 30) || t.nextPointId == 10).Any();
@ -155,10 +159,10 @@ namespace Khd.Core.Wpf.TaskForm
} }
this.endStationCode.ItemsSource = _endStationCodes.OrderBy(t => t); this.endStationCode.ItemsSource = _endStationCodes.OrderBy(t => t);
this.endStationCode.Items.Refresh(); this.endStationCode.Items.Refresh();
if (_endStationCodes.Count >= 1) //if (_endStationCodes.Count >= 1)
{ //{
this.endStationCode.SelectedIndex = 0; // this.endStationCode.SelectedIndex = 0;
} //}
} }
private void CheckBox_Unchecked(object sender, RoutedEventArgs e) private void CheckBox_Unchecked(object sender, RoutedEventArgs e)

Loading…
Cancel
Save