添加移库逻辑

master
2 years ago
parent 027b0f062d
commit be5d2f64fd

@ -166,7 +166,7 @@ namespace Khd.Core.Application
{
var wcsTask = _dbContext.WcsTask
.Where(t => (t.taskType == 32 || t.taskType == 48) && (t.endPointId == baseEquip.objid || t.currPointId == baseEquip.objid))
.OrderByDescending(t=>t.createTime)
.OrderByDescending(t => t.createTime)
.FirstOrDefault();
if (wcsTask != null)
{

@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Khd.Core.Library
{

@ -45,15 +45,16 @@ namespace Khd.Core.Plc
return null;
}
string res = Encoding.UTF8.GetString(result).Replace("\0", "").Replace("$", "").Replace("\\u", "").Trim();
if (res.Contains("JYHB"))
{
return res[res.IndexOf('J')..].Substring(0,12);
return res[res.IndexOf('J')..].Substring(0, 12);
}
else if(res.Contains('C'))
else if (res.Contains('C'))
{
return res[res.IndexOf('C')..];
}else
}
else
{
return "";
}

@ -64,7 +64,7 @@ namespace Khd.Core.Wcs.Global
public static List<BasePlc> basePlcs = new List<BasePlc>();
public static List<PlcConfig> PlcConfigs { get; set; }
public static int DeleteLogDay { get; internal set; }
public static List<string> BigContainerCodes = new List<string>(){ "JYHB01020001", "JYHB01020002", "JYHB01020003", "JYHB01020004" };
public static List<string> BigContainerCodes = new List<string>() { "JYHB01020001", "JYHB01020002", "JYHB01020003", "JYHB01020004" };
public static Dictionary<int, Dictionary<string, PlcPoint>> PlcPoints = new Dictionary<int, Dictionary<string, PlcPoint>>();
public static Dictionary<int, Plc.S7.Plc> PlcDic = new Dictionary<int, Plc.S7.Plc>();

@ -1,9 +1,7 @@
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.EntityFramework;
using Khd.Core.Library;
using Khd.Core.Wcs.Global;
using Khd.Core.Wcs.Wcs;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System.Data;
@ -76,7 +74,7 @@ namespace Khd.Core.Wcs
secondFloorPoint.StartPoint();
//二层AGV
SecondFloorAGV secondFloorAGV = new(_host,2);
SecondFloorAGV secondFloorAGV = new(_host, 2);
secondFloorAGV.StartPoint();
//二楼线体
@ -100,7 +98,7 @@ namespace Khd.Core.Wcs
fifthFloorPoint.StartPoint();
//五层CTU
FiveFloorCTU fiveFloorCTU = new(_host,5);
FiveFloorCTU fiveFloorCTU = new(_host, 5);
fiveFloorCTU.StartPoint();
//五层AGV
@ -108,7 +106,7 @@ namespace Khd.Core.Wcs
fifthFloorAGV.StartPoint();
//背负式Agv
FiveFloorBearAgv fiveFloorBearAgv = new(_host,5);
FiveFloorBearAgv fiveFloorBearAgv = new(_host, 5);
fiveFloorBearAgv.StartPoint();
}
catch (Exception ex)

@ -2,7 +2,6 @@
using Khd.Core.Library;
using Khd.Core.Wcs;
using Khd.Core.Wcs.Global;
using Masuit.Tools.Logging;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
@ -69,7 +68,7 @@ internal class Program
Console.WriteLine("全局异常捕获:");
Console.WriteLine(exception.Message);
Console.WriteLine(exception.StackTrace);
_logger.Info("全局异常捕获:" + exception.Message+"\n"+exception.StackTrace);
_logger.Info("全局异常捕获:" + exception.Message + "\n" + exception.StackTrace);
}
else
{
@ -91,7 +90,7 @@ internal class Program
StaticData.PlcConfigs = configuration.GetSection("PlcConfigs").Get<List<PlcConfig>>();
ConnectionStrings.ConnectionString = configuration["ConnectionStrings:DefaultConnection"];
StaticData.DeleteLogDay= Convert.ToInt32(configuration["DeleteLogDays"] ?? "10");
StaticData.DeleteLogDay = Convert.ToInt32(configuration["DeleteLogDays"] ?? "10");
}
private static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)

@ -34,12 +34,12 @@ namespace Khd.Core.Wcs
/// </summary>
/// <param name="wmsBaseLocation"></param>
/// <param name="dbContext"></param>
public static void LockOutLocation(WmsBaseLocation wmsBaseLocation,DefaultDbContext dbContext)
public static void LockOutLocation(WmsBaseLocation wmsBaseLocation, DefaultDbContext dbContext)
{
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();
if(wmsLocation != null)
if (wmsLocation != null)
{
wmsLocation.locationStatus = "2";
dbContext.Update(wmsLocation);
@ -65,8 +65,8 @@ namespace Khd.Core.Wcs
}
}
public readonly static object SecondTaskLock = new ();
public readonly static object ThirdTaskLock = new ();
public readonly static object FiveTaskLock = new ();
public readonly static object SecondTaskLock = new();
public readonly static object ThirdTaskLock = new();
public readonly static object FiveTaskLock = new();
}
}

@ -1,6 +1,5 @@
using Khd.Core.EntityFramework;
using Khd.Core.Library;
using Masuit.Tools.Logging;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

@ -1,11 +1,9 @@
using AngleSharp.Dom;
using Khd.Core.Domain.Models;
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library;
using Khd.Core.Library.Mapper;
using Khd.Core.Wcs.Global;
using Masuit.Tools;
using Masuit.Tools.Logging;
using Microsoft.CodeAnalysis;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
@ -695,7 +693,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
}
else if (emptyEquip.Count == 3&& secondEmptyEquip.Count >= 2)
else if (emptyEquip.Count == 3 && secondEmptyEquip.Count >= 2)
{
BaseEquip startEquip = emptyEquip.First();
WcsTask wcsTask = new WcsTask()
@ -1123,7 +1121,7 @@ namespace Khd.Core.Wcs.Wcs
objid = StaticData.SnowId.NextId(),
orderId = wmsRawOutstock.rawOutstockId,
taskType = 41,
containerNo = wmsBaseLocation.containerCode,
containerNo = wmsRawStock.palletInfoCode,
createBy = "WCS",
createTime = DateTime.Now,
taskStatus = 0,
@ -1778,6 +1776,10 @@ namespace Khd.Core.Wcs.Wcs
{
list = wcsTaskManuals.Where(t => t.taskType == 30).ToList();
}
if (list.Count == 0)
{
list = wcsTaskManuals.Where(t => t.taskType == 102).ToList();
}
foreach (var wcs in list.Take(6))
{
WcsTask wcsTask = CoreMapper.Map<WcsTask>(wcs);
@ -2594,6 +2596,5 @@ namespace Khd.Core.Wcs.Wcs
}
}
}

@ -5,7 +5,6 @@ using Khd.Core.Library.Mapper;
using Khd.Core.Plc.S7;
using Khd.Core.Wcs.Global;
using Masuit.Tools;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Z.EntityFramework.Plus;

@ -6,13 +6,9 @@ using Khd.Core.Library.Mapper;
using Khd.Core.Plc.S7;
using Khd.Core.Wcs.Global;
using Masuit.Tools;
using Masuit.Tools.Logging;
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using System.ComponentModel;
using System.Transactions;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
@ -570,45 +566,45 @@ namespace Khd.Core.Wcs.Wcs
//WmsProductInstockDetail? wmsProductInstockDetail = dbContext.WmsProductInstockDetail.Where(t => t.productInstockId == wmsProductInstock.productInstockId).FirstOrDefault();
//if (wmsProductInstockDetail != null)
//{
wmsProductInstock.executeStatus = "2";
wmsProductInstock.endTime = DateTime.Now;
dbContext.Update(wmsProductInstock);
WmsProductStock wmsProductStock = new WmsProductStock()
{
productId = wmsProductInstock.productId,
activeFlag = "1",
updateBy = "WCS",
updateDate = DateTime.Now,
saleorderCode = wmsProductInstock.saleorderCode,
saleOrderId = wmsProductInstock.SaleOrderId == null ? 0 : wmsProductInstock.SaleOrderId,
stockType = "2",
productStockId = wmsProductInstock.productInstockId,
qualityStatus = "0",
createBy = "WCS",
createDate = DateTime.Now,
locationCode = wmsBaseLocation.locationCode,
warehouseFloor = 5,
totalAmount = 1,
instockDate = DateTime.Now,
productBatch = mesBasePalletInfo.materialBarcode,
palletInfoCode = mesBasePalletInfo.palletInfoCode,
frozenAmount = 0,
occupyAmount = 0,
planCode = wmsProductInstock.planCode,
planDetailCode = wmsProductInstock.planDetailCode,
warehouseId = 512
};
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
//wmsProductInstockDetail.executeStatus = "2";
//wmsProductInstockDetail.instockDate = DateTime.Now;
startEquip.emptyCount = 0;
//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();
wmsProductInstock.executeStatus = "2";
wmsProductInstock.endTime = DateTime.Now;
dbContext.Update(wmsProductInstock);
WmsProductStock wmsProductStock = new WmsProductStock()
{
productId = wmsProductInstock.productId,
activeFlag = "1",
updateBy = "WCS",
updateDate = DateTime.Now,
saleorderCode = wmsProductInstock.saleorderCode,
saleOrderId = wmsProductInstock.SaleOrderId == null ? 0 : wmsProductInstock.SaleOrderId,
stockType = "2",
productStockId = wmsProductInstock.productInstockId,
qualityStatus = "0",
createBy = "WCS",
createDate = DateTime.Now,
locationCode = wmsBaseLocation.locationCode,
warehouseFloor = 5,
totalAmount = 1,
instockDate = DateTime.Now,
productBatch = mesBasePalletInfo.materialBarcode,
palletInfoCode = mesBasePalletInfo.palletInfoCode,
frozenAmount = 0,
occupyAmount = 0,
planCode = wmsProductInstock.planCode,
planDetailCode = wmsProductInstock.planDetailCode,
warehouseId = 512
};
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
//wmsProductInstockDetail.executeStatus = "2";
//wmsProductInstockDetail.instockDate = DateTime.Now;
startEquip.emptyCount = 0;
//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();
//}
}

@ -2,10 +2,8 @@
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library;
using Khd.Core.Library.Mapper;
using Khd.Core.Wcs.Global;
using Masuit.Tools;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
@ -56,7 +54,7 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.IsDelete == 0 || t.IsDelete == null)
.Where(t => t.nextPointId == agvID)
.OrderBy(t => t.createTime).ToList();
foreach (var item in taskList)//出库
{
item.updateTime = DateTime.Now;

@ -6,7 +6,6 @@ using Khd.Core.Library.Mapper;
using Khd.Core.Plc.S7;
using Khd.Core.Wcs.Global;
using Masuit.Tools;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
@ -381,7 +380,7 @@ namespace Khd.Core.Wcs.Wcs
item.updateTime = DateTime.Now;
if (item.taskStatus == 0)//CTU会同时生成多个任务生成就下发
{
if (item.taskType == 30)//出库任务
if (item.taskType == 30 || item.taskType == 100 || item.taskType == 102)//出库任务
{
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
@ -476,52 +475,13 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
else if (item.taskType == 100)//盘库
{
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new()
{
positionCode =wmsBaseLocation.agvPositionCode,
type = "05"
},
new()
{
positionCode =endEquip.agvPositionCode,
type = "00"
},
},
ctnrTyp = "1",
taskTyp = "F504"
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.code == "0")
{
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
dbContext.SaveChanges();
}
else
{
_logger.Info("CTU下发出库任务失败" + reponseMessage?.message);
}
}
}
else
{
{
if (item.taskStatus == 3)
{
if (item.taskType == 30 || item.taskType == 100)
if (item.taskType == 30 || item.taskType == 100 || item.taskType == 102)
{
var canOut = StaticData.PlcDic[1].Read(isput.plcpointAddress);
if (canOut != null && Convert.ToInt64(canOut) == 0)
@ -612,7 +572,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.SaveChanges();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
}
else if (item.taskType == 100)//出库任务
else if (item.taskType == 100 || item.taskType == 102)//出库任务
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
.First(t => t.locationId == item.currPointId && t.warehouseFloor == 5);
@ -622,7 +582,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 6 });
dbContext.SaveChanges();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
int wcsTaskCount = dbContext.WcsTask.Where(t => (t.taskType == 30 || t.taskType == 100) && t.taskStatus != 6).Count();
int wcsTaskCount = dbContext.WcsTask.Where(t => (t.taskType == 30 || t.taskType == 100 || item.taskType == 102) && t.taskStatus != 6).Count();
if (wcsTaskCount == 0)
{
StaticData.PlcDic[1].WriteToPoint(this.canReceive.plcpointAddress, "1", this.canReceive.plcpointLength?.ToString());

@ -5,10 +5,8 @@ using Khd.Core.Library.Mapper;
using Khd.Core.Plc.S7;
using Khd.Core.Wcs.Global;
using Masuit.Tools;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System.Threading.Tasks;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
@ -63,7 +61,7 @@ namespace Khd.Core.Wcs.Wcs
BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.equipType == 1 && t.floorNo == FloorNo);
if (rfid != null && isSignal != null)
{
//正常读到输送线信息 有到位信号,并且有托盘,获取条码信息
if (Convert.ToInt32(isSignal) == 1)//五楼接驳位
{

@ -4,7 +4,6 @@ using Khd.Core.Library;
using Khd.Core.Library.Mapper;
using Khd.Core.Plc.S7;
using Khd.Core.Wcs.Global;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Z.EntityFramework.Plus;
@ -21,7 +20,7 @@ namespace Khd.Core.Wcs.Wcs
private readonly IHost _host;
private readonly BasePlcpoint LineRFID;
private readonly BasePlcpoint LineSignal;
public FourthFloorPoint( IHost host,int floor)
public FourthFloorPoint(IHost host, int floor)
{
Floor = floor;
this._host = host;

@ -2,11 +2,9 @@
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library;
using Khd.Core.Library.Mapper;
using Khd.Core.Plc.S7;
using Khd.Core.Wcs.Global;
using Masuit.Tools;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
@ -488,7 +486,7 @@ namespace Khd.Core.Wcs.Wcs
if (item.currPointId == lineEquip.objid)
{
var lineSignal02 = StaticData.PlcDic[0].Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal02").plcpointAddress);
if (lineSignal02 != null && lineSignal02.ToString() == "1")
if (lineSignal02 != null && lineSignal02.ToString() == "1")
{
var agvTask = new RequestAGVTaskDto
{
@ -825,7 +823,7 @@ namespace Khd.Core.Wcs.Wcs
{
if (ex is PlcException)
{
}
else
{

@ -1,12 +1,10 @@
using Azure.Identity;
using Khd.Core.Domain.Models;
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library;
using Khd.Core.Library.Mapper;
using Khd.Core.Plc.S7;
using Khd.Core.Wcs.Global;
using Masuit.Tools;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Z.EntityFramework.Plus;

@ -4,7 +4,6 @@ using Khd.Core.Library;
using Khd.Core.Library.Mapper;
using Khd.Core.Plc.S7;
using Khd.Core.Wcs.Global;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace Khd.Core.Wcs.Wcs
@ -83,7 +82,7 @@ namespace Khd.Core.Wcs.Wcs
if (wcsTask.taskType != 99)//不是人工任务
{
bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == inEquip.objid).Any();
if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 0&&!hasTask)//小包入口要料
if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 0 && !hasTask)//小包入口要料
{
dbContext.WcsTask.Remove(wcsTask);//删除原本的任务
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);

@ -5,11 +5,8 @@ using Khd.Core.Library;
using Khd.Core.Plc.S7;
using Khd.Core.Wcs.Global;
using Masuit.Tools;
using Masuit.Tools.Logging;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.IdentityModel.Tokens;
using Newtonsoft.Json;
namespace Khd.Core.Wcs.Wcs

@ -1,5 +1,4 @@
using Castle.Components.DictionaryAdapter.Xml;
using Khd.Core.Domain.Dto.webapi;
using Khd.Core.Domain.Dto.webapi;
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library;
@ -7,7 +6,6 @@ using Khd.Core.Library.Mapper;
using Khd.Core.Plc.S7;
using Khd.Core.Wcs.Global;
using Masuit.Tools;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
@ -50,7 +48,7 @@ namespace Khd.Core.Wcs.Wcs
FZJThread.IsBackground = true;
FZJThread.Start();
Thread MonitorTraySignalThread= new Thread(MonitorTraySignal);
Thread MonitorTraySignalThread = new Thread(MonitorTraySignal);
MonitorTraySignalThread.Name = "ThirdFloorAGVTraySignal";
MonitorTraySignalThread.IsBackground = true;
MonitorTraySignalThread.Start();

@ -5,7 +5,6 @@ using Khd.Core.Library.Mapper;
using Khd.Core.Plc.S7;
using Khd.Core.Wcs.Global;
using Masuit.Tools;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Z.EntityFramework.Plus;

@ -1585,6 +1585,7 @@
<Button Content="搜索" Background="#346DFF" Foreground="White" FontSize="25" Height="50" Width="100" Margin="20,0,0,0" Click="SelectButton_Click" KeyDown="Form1_KeyDown"/>
<Button Content="出空箱" HorizontalAlignment="Right" Background="#346DFF" Foreground="White" FontSize="25" Height="50" Width="100" Margin="20,0,0,0" Click="CallEmptyBtn_Click"/>
<Button Content="出选择料箱" HorizontalAlignment="Right" Background="#346DFF" Foreground="White" FontSize="25" Height="50" Width="200" Margin="20,0,0,0" Click="CallTrayBtn_Click"/>
<Button Content="移库" HorizontalAlignment="Right" Background="#346DFF" Foreground="White" FontSize="25" Height="50" Width="200" Margin="20,0,0,0" Click="RemoveTrayBtn_Click"/>
</StackPanel>
</Border>
<Border Grid.Row="1" Height="100" Background="#213269" BorderThickness="2" CornerRadius="10" Margin="0,5,0,0">
@ -2373,6 +2374,50 @@
</StackPanel>
</StackPanel>
</TabItem>
<TabItem x:Name="RemoveManager" Header="辅料移库" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Background="#213269" Foreground="White" Width="160" Height="100" Margin="5">
<Grid Height="1100" Width="1700">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="辅料移库" FontSize="100" VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Column="0" Grid.ColumnSpan="4"/>
<StackPanel Orientation="Horizontal" Grid.Row="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" Margin="5">
<TextBlock Text="原料箱号:" FontSize="70" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<hc:TextBox x:Name="rawSourceBox" LostFocus="rawSourceBox_LostFocus" FontSize="50" Width="500" Height="150" Margin="0,0,0,0" hc:InfoElement.ShowClearButton="True"/>
<Button Click="rawSourceBoxClear_Click" HorizontalAlignment="Right" Height="100" Panel.ZIndex="1" Width="100" Margin="-100,0,0,0" Grid.Column="5" Grid.Row="2">
<Image Source="..\Resources\cancel.png"/>
</Button>
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Row="1" Grid.Column="2" Grid.ColumnSpan="2" HorizontalAlignment="Center" Margin="5">
<TextBlock Text="移库料箱:" FontSize="70" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<hc:TextBox x:Name="removeSourceBox" FontSize="50" LostFocus="removeSourceBox_LostFocus" Width="500" Height="150" Margin="0,0,0,0" hc:InfoElement.ShowClearButton="True"/>
<Button Click="removeSourceBoxClear_Click" HorizontalAlignment="Right" Height="100" Panel.ZIndex="1" Width="100" Margin="-100,0,0,0" Grid.Column="5" Grid.Row="2">
<Image Source="..\Resources\cancel.png"/>
</Button>
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Row="2" Grid.ColumnSpan="3" HorizontalAlignment="Center" Margin="5">
<TextBlock Text="条码号:" FontSize="70" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<hc:TextBox x:Name="removeBarCode" FontSize="50" LostFocus="removeBarCode_LostFocus" Width="750" Height="150" Margin="0,0,0,0" hc:InfoElement.ShowClearButton="True"/>
<Button Click="removeBarCodeClear_Click" HorizontalAlignment="Right" Height="100" Panel.ZIndex="1" Width="100" Margin="-100,0,0,0" Grid.Column="5" Grid.Row="2">
<Image Source="..\Resources\cancel.png"/>
</Button>
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Row="2" Grid.Column="3" HorizontalAlignment="Center" Margin="5">
<TextBlock Text="数量:" FontSize="70" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<TextBlock x:Name="removeScan" FontSize="50" Width="150" Margin="0,0,0,0" />
</StackPanel>
<Button Content="确认移库" Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="4" Width="600" Height="150" FontSize="75" Background="#346DFF" Foreground="White" Click="btnRemoveConfirmBox_Click"/>
</Grid>
</TabItem>
<TabItem x:Name="FirstFloorManager" Header="一楼接驳位" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Background="#213269" Foreground="White" Width="160" Height="100" Margin="5">
<Grid Height="1100" Width="1700">
<Grid.RowDefinitions>

@ -1,7 +1,6 @@
using HandyControl.Tools.Extension;
using Jc.SnowId;
using Khd.Core.Domain.Auth;
using Khd.Core.Domain.Dto.webapi;
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library.Mapper;
@ -12,12 +11,11 @@ using Khd.Core.Wpf.Scan;
using Khd.Core.Wpf.TaskForm;
using Masuit.Tools;
using Masuit.Tools.Logging;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.Diagnostics;
using System.IO.Ports;
@ -25,13 +23,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.Collections.ObjectModel;
using static HandyControl.Tools.Interop.InteropValues;
using System.Windows.Input;
using System.Windows.Threading;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wpf.Form
{
@ -617,6 +613,7 @@ namespace Khd.Core.Wpf.Form
}
public int i = 0;
/// <summary>
/// 查询任务
/// </summary>
@ -1758,6 +1755,14 @@ namespace Khd.Core.Wpf.Form
}
}
private void rawSourceBoxClear_Click(object sender, RoutedEventArgs e)
{
this.rawSourceBox.Text = string.Empty;
}
private void removeSourceBoxClear_Click(object sender, RoutedEventArgs e)
{
this.removeSourceBox.Text = string.Empty;
}
/// <summary>
/// 入库扫描
/// </summary>
@ -2588,7 +2593,10 @@ namespace Khd.Core.Wpf.Form
//}
var wmsBaseLocation = dbContext.WmsBaseLocation
.Where(t => t.locationStatus == "1")
.Where(t => t.warehouseId == 512 && t.ContainerStatus == "1").ToList();
.Where(t => t.warehouseId == 512 && t.ContainerStatus == "1")
.OrderBy(t => t.locColumn)
.ThenBy(t => t.locRow)
.ToList();
var wmsRawStock = dbContext.WmsRawStock.Where(t => t.warehouseId == 512).ToList();
List<string> palletInfoCodes = wmsRawStock.Select(t => t.palletInfoCode).ToList();
wmsBaseLocation.RemoveAll(t => palletInfoCodes.Contains(t.containerCode));
@ -2653,7 +2661,7 @@ namespace Khd.Core.Wpf.Form
BaseEquip endEquip = SystemData.BaseEquip.First(t => t.objid == 20);
if (itemsControlItems.Count == 0)
{
MessageBox.Show("请选择料箱!");
HandyControl.Controls.MessageBox.Show("请选择料箱!");
return;
}
@ -2708,13 +2716,270 @@ namespace Khd.Core.Wpf.Form
item.locationStatus = "6";
dbContext.Update(item);
}
if (addList.Count < 6)
{
var messageBoxResult = HandyControl.Controls.MessageBox.Show($"已创建{addList.Count}个料箱的任务,是否需要创建出空箱的任务?", "提示", MessageBoxButton.YesNo, MessageBoxImage.Question);
if (messageBoxResult == MessageBoxResult.Yes)
{
EmptyCountForm emptyCountForm = new(1, 6 - addList.Count);
emptyCountForm.ShowDialog();
if (EmptyCountForm.IsSelect)
{
List<WmsBaseLocation> emptyLocations = dbContext.ExecuteSqlQuery<WmsBaseLocation>(@$"
select t1.location_id locationId,
t1.container_code containerCode,
t1.location_code locationCode
from wms_base_location t1
left join wms_raw_stock t2
on t1.location_code=t2.location_code
where t2.location_code is null and t1.location_status=1
and t1.container_status=1 and t1.warehouse_id=512
order by t1.loc_column,t1.loc_row
");
if (emptyLocations.Count < EmptyCountForm.EmptyTaskCount)
{
messageBoxResult = HandyControl.Controls.MessageBox.Show("没有足够的空箱库位库位,剩余空库位数量为" + emptyLocations.Count + "!\n是否将现有的空箱全部出库", "提示", MessageBoxButton.YesNo, MessageBoxImage.Information);
if (messageBoxResult == MessageBoxResult.Yes)
{
foreach (var item in emptyLocations)
{
item.locationStatus = "6";
item.ContainerStatus = "2";
addList.Add(new WcsTaskManual()
{
objid = Global.SnowId.NextId(),
taskType = 30,
containerNo = item.containerCode,
startPointId = item.locationId,
startPointNo = item.locationCode,
currPointId = item.locationId,
currPointNo = item.locationCode,
nextPointId = ctuEquip.objid,
nextPointNo = ctuEquip.equipNo,
endPointId = endEquip.objid,
endPointNo = endEquip.equipNo,
createTime = DateTime.Now,
ud1 = item.locColumn,
taskStatus = 0,
remark = "CTU空库任务",
floorNo = 5,
fromFloorNo = 5,
useFlag = 1
});
dbContext.Update(item);
}
}
}
else
{
for (int i = 0; i < EmptyCountForm.EmptyTaskCount; i++)
{
emptyLocations[i].locationStatus = "6";
emptyLocations[i].ContainerStatus = "2";
addList.Add(new WcsTaskManual()
{
objid = Global.SnowId.NextId(),
taskType = 30,
containerNo = emptyLocations[i].containerCode,
startPointId = emptyLocations[i].locationId,
startPointNo = emptyLocations[i].locationCode,
currPointId = emptyLocations[i].locationId,
currPointNo = emptyLocations[i].locationCode,
nextPointId = ctuEquip.objid,
nextPointNo = ctuEquip.equipNo,
endPointId = endEquip.objid,
endPointNo = endEquip.equipNo,
createTime = DateTime.Now,
ud1 = emptyLocations[i].locColumn,
taskStatus = 0,
remark = "CTU空库任务",
floorNo = 5,
fromFloorNo = 5,
useFlag = 1
});
dbContext.Update(emptyLocations[i]);
}
}
}
}
}
dbContext.AddRange(addList);
dbContext.SaveChanges();
HandyControl.Controls.MessageBox.Show("创建出库任务成功!");
itemsControlItems.Clear();
CallSelectedItem.Clear();
GetPersonCallMaterialData();
}
}
catch
{
}
}
/// <summary>
/// 叫托盘
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void RemoveTrayBtn_Click(object sender, RoutedEventArgs e)
{
try
{
BaseEquip ctuEquip = SystemData.BaseEquip.First(t => t.objid == 11);
BaseEquip endEquip = SystemData.BaseEquip.First(t => t.objid == 20);
List<WcsTaskManual> taskList = new List<WcsTaskManual>();
if (itemsControlItems.Count == 0)
{
HandyControl.Controls.MessageBox.Show("请选择料箱!");
return;
}
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
List<long> idList = itemsControlItems.Select(x => x.baseLocationId).ToList();
if (idList.Count == 0)
{
HandyControl.Controls.MessageBox.Error("请选择需要移库的料箱!");
return;
}
else
{
if (idList.Count == 1)
{
List<WmsBaseLocation> emptyLocations = dbContext.ExecuteSqlQuery<WmsBaseLocation>(@$"
select t1.location_id locationId,
t1.container_code containerCode,
t1.location_code locationCode
from wms_base_location t1
left join wms_raw_stock t2
on t1.location_code=t2.location_code
where t2.location_code is null and t1.location_status=1
and t1.container_status=1 and t1.warehouse_id=512
order by t1.loc_column,t1.loc_row
");
var wmsLocation = dbContext.WmsBaseLocation.FirstOrDefault(t => t.locationId == idList[0] && t.locationStatus == "1");
if (wmsLocation == null)
{
HandyControl.Controls.MessageBox.Error("选择的料箱错误,请重新选择!");
return;
}
if (emptyLocations.Count == 0)
{
HandyControl.Controls.MessageBox.Error("只选择了一个移库料箱,但是没有空箱库位库位,无法移库!");
return;
}
MessageBoxResult messageBoxResult = HandyControl.Controls.MessageBox.Show("选择了一个移库料箱,需要出空料箱,是否确认?", "提示", MessageBoxButton.YesNo, MessageBoxImage.Question);
if (messageBoxResult == MessageBoxResult.Yes)
{
WmsBaseLocation emptyLocation = emptyLocations.First();
emptyLocation.locationStatus = "4";
emptyLocation.ContainerStatus = "2";
wmsLocation.locationStatus = "4";
wmsLocation.ContainerStatus = "2";
taskList.Add(new WcsTaskManual()
{
objid = Global.SnowId.NextId(),
taskType = 102,
containerNo = wmsLocation.containerCode,
startPointId = wmsLocation.locationId,
startPointNo = wmsLocation.locationCode,
currPointId = wmsLocation.locationId,
currPointNo = wmsLocation.locationCode,
nextPointId = ctuEquip.objid,
nextPointNo = ctuEquip.equipNo,
endPointId = endEquip.objid,
endPointNo = endEquip.equipNo,
createTime = DateTime.Now,
ud1 = wmsLocation.locColumn,
taskStatus = 0,
remark = "CTU托盘任务",
floorNo = 5,
fromFloorNo = 5,
useFlag = 1
});
taskList.Add(new WcsTaskManual()
{
objid = Global.SnowId.NextId(),
taskType = 102,
containerNo = emptyLocation.containerCode,
startPointId = emptyLocation.locationId,
startPointNo = emptyLocation.locationCode,
currPointId = emptyLocation.locationId,
currPointNo = emptyLocation.locationCode,
nextPointId = ctuEquip.objid,
nextPointNo = ctuEquip.equipNo,
endPointId = endEquip.objid,
endPointNo = endEquip.equipNo,
createTime = DateTime.Now,
ud1 = emptyLocation.locColumn,
taskStatus = 0,
remark = "CTU托盘任务",
floorNo = 5,
fromFloorNo = 5,
useFlag = 1
});
dbContext.Update(wmsLocation);
dbContext.Update(emptyLocation);
dbContext.AddRange(taskList);
dbContext.SaveChanges();
HandyControl.Controls.MessageBox.Show("移库任务创建成功!");
itemsControlItems.Clear();
CallSelectedItem.Clear();
GetPersonCallMaterialData();
}
}
else if (idList.Count == 2)
{
List<WmsBaseLocation> wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => idList.Contains(t.locationId))
.Where(t => t.ContainerStatus == "1")
.Where(t => t.locationStatus == "1")
.ToList();
if (wmsBaseLocations.Count != 2)
{
HandyControl.Controls.MessageBox.Error("选择的料箱库位状态异常,请重新选择!");
return;
}
foreach (var item in wmsBaseLocations)
{
taskList.Add(new WcsTaskManual()
{
objid = Global.SnowId.NextId(),
taskType = 102,
containerNo = item.containerCode,
startPointId = item.locationId,
startPointNo = item.locationCode,
currPointId = item.locationId,
currPointNo = item.locationCode,
nextPointId = ctuEquip.objid,
nextPointNo = ctuEquip.equipNo,
endPointId = endEquip.objid,
endPointNo = endEquip.equipNo,
createTime = DateTime.Now,
ud1 = item.locColumn,
taskStatus = 0,
remark = "CTU托盘任务",
floorNo = 5,
fromFloorNo = 5,
useFlag = 1
});
item.ContainerStatus = "2";
item.locationStatus = "6";
dbContext.Update(item);
}
dbContext.AddRange(taskList);
dbContext.SaveChanges();
HandyControl.Controls.MessageBox.Show("移库任务创建成功!");
itemsControlItems.Clear();
CallSelectedItem.Clear();
GetPersonCallMaterialData();
}
else if (idList.Count > 2)
{
HandyControl.Controls.MessageBox.Error("选择料箱不能超过2个");
return;
}
}
itemsControlItems.Clear();
CallSelectedItem.Clear();
GetPersonCallMaterialData();
}
catch
{
@ -3607,5 +3872,135 @@ namespace Khd.Core.Wpf.Form
}
}
#region 移库方法
private void removeSourceBox_LostFocus(object sender, RoutedEventArgs e)
{
if (string.IsNullOrEmpty(this.removeSourceBox.Text))
{
return;
}
try
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
WcsTask? wcsTask = dbContext.WcsTask.Where(t => t.containerNo == this.removeSourceBox.Text).FirstOrDefault();
if (wcsTask == null)
{
HandyControl.Controls.MessageBox.Show("未找到该托盘!");
this.removeSourceBox.Text = "";
return;
}
}
catch
{
}
}
private void rawSourceBox_LostFocus(object sender, RoutedEventArgs e)
{
if (string.IsNullOrEmpty(this.rawSourceBox.Text))
{
return;
}
try
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
WcsTask? wcsTask = dbContext.WcsTask.Where(t => t.containerNo == this.rawSourceBox.Text).FirstOrDefault();
if (wcsTask == null)
{
HandyControl.Controls.MessageBox.Show("未找到该托盘!");
this.rawSourceBox.Text = "";
return;
}
}
catch
{
}
}
private void removeBarCodeClear_Click(object sender, RoutedEventArgs e)
{
removeBarCode.Text = "";
}
private void removeBarCode_LostFocus(Object sender, RoutedEventArgs e)
{
try
{
if (string.IsNullOrEmpty(this.rawSourceBox.Text))
{
HandyControl.Controls.MessageBox.Show("请先选择托盘!");
return;
}
if (string.IsNullOrEmpty(this.removeBarCode.Text))
{
return;
}
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
WmsRawStock? wmsRawStock = dbContext.WmsRawStock.Where(t => t.palletInfoCode == this.rawSourceBox.Text)
.Where(t => t.instockBatch == this.removeBarCode.Text)
.FirstOrDefault();
if (wmsRawStock == null)
{
HandyControl.Controls.MessageBox.Show($"未在{this.rawSourceBox.Text}托盘中找到{this.removeBarCode.Text}条码!");
this.removeBarCode.Text = "";
this.removeScan.Text = string.Empty;
return;
}
else
{
this.removeScan.Text = wmsRawStock.frozenAmount.ToString();
}
}
catch
{
}
}
private void btnRemoveConfirmBox_Click(object sender, RoutedEventArgs e)
{
if (string.IsNullOrEmpty(this.rawSourceBox.Text))
{
HandyControl.Controls.MessageBox.Show("请先选择移库源托盘!");
return;
}
if (string.IsNullOrEmpty(this.removeSourceBox.Text))
{
HandyControl.Controls.MessageBox.Show("请先选择移库条码!");
return;
}
if (string.IsNullOrEmpty(this.removeBarCode.Text))
{
HandyControl.Controls.MessageBox.Show("请先扫码移库数量!");
return;
}
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
try
{
WmsBaseLocation removeLocation = dbContext.WmsBaseLocation.Where(t => t.containerCode == this.removeSourceBox.Text).First();
WmsBaseLocation rawLocation = dbContext.WmsBaseLocation.Where(t => t.containerCode == this.rawSourceBox.Text).First();
dbContext.WmsRawStock.Where(t => t.locationCode == rawLocation.locationCode)
.Where(t => t.instockBatch == this.removeBarCode.Text)
.Update(t => new WmsRawStock
{
locationCode = removeLocation.locationCode,
});
HandyControl.Controls.MessageBox.Show("移库成功!");
this.removeBarCode.Text = "";
this.removeScan.Text = string.Empty;
}
catch
{
}
}
#endregion
}
}

@ -43,7 +43,7 @@ namespace Khd.Core.Wpf.TaskForm.Inventory
using var scope = this._host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var wmsRawStocks = dbContext.WmsRawStock.Where(t => t.palletInfoCode == _containerNo)
.WhereIf(_materialId!=0, t => t.materialId == _materialId)
.WhereIf(_materialId != 0, t => t.materialId == _materialId)
.ToList();
if (wmsRawStocks.Count == 0)
{

@ -4,10 +4,8 @@ using Khd.Core.Wpf.TaskForm.Inventory;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Windows;
using System.Windows.Media.Media3D;
namespace Khd.Core.Wpf.TaskForm
{
@ -95,7 +93,7 @@ namespace Khd.Core.Wpf.TaskForm
private void EditBtn_Click(object sender, RoutedEventArgs e)
{
if(this.InventoryDataGrid.SelectedItem!= null)
if (this.InventoryDataGrid.SelectedItem != null)
{
dynamic item = this.InventoryDataGrid.SelectedItem;
long materialId = item.MaterialId;

@ -15,7 +15,7 @@ namespace Khd.Core.Wpf.TaskForm
private readonly IHost _host;
private readonly string _ud3;
private readonly int _isOut;
public SelectOutRawForm(IHost host,string ud3,int isOut)
public SelectOutRawForm(IHost host, string ud3, int isOut)
{
InitializeComponent();
_host = host;

@ -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=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=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