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.Extensions;
using Khd.Core.Library.Mapper;
using Khd.Core.Plc;
using Khd.Core.Plc.S7;
using Khd.Core.Wpf.dto;
using Khd.Core.Wpf.Scan;
using Khd.Core.Wpf.TaskForm;
using Khd.Core.Wpf.WindowPage;
using Masuit.Tools;
using Masuit.Tools.Logging;
using Microsoft.CodeAnalysis;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Internal;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.IdentityModel.Tokens;
using Newtonsoft.Json;
using SixLabors.ImageSharp.Drawing;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing.Printing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Timers;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Media3D;
using System.Windows.Shapes;
using System.Windows.Threading;
using Z.EntityFramework.Plus;
using static HandyControl.Tools.Interop.InteropValues;
using Location = Khd.Core.Wpf.dto.Location;
namespace Khd.Core.Wpf.Form
{
///
/// FormBoardT.xaml 的交互逻辑
///
public partial class FormBoardT : Window
{
private List productIds = new List() { 231, 531, 521 };
public static long? UserId = 1;
public static readonly JcSnowId _jcSnowId = new JcSnowId();
private readonly IHost _host;
private Khd.Core.Plc.S7.Plc _plc;
private DispatcherTimer ShowTimer;//刷新时间
private DispatcherTimer PLCMessage;//呈现PLC机柜信息
private DispatcherTimer UPMessageTimer;//刷新上件记录
private DispatcherTimer ShowOrderMessage;//呈现PLC机柜信息
private object order_code;
private int UpState;//对应上件站点的状态,0为良好 1为损坏
private SerialPortModel serialPortModel;
private SerialPortModel virtualSerialPortModel;
private SerialPortHelper serialPortHelper;
List basePlcpoints = new List();
object timerjilu;
Dictionary SelectedItem = new Dictionary();
Dictionary InSelectedItem = new Dictionary();
List CallSelectedItem = new List();
public List barcodeLsit = new List();
private int pageCount = 15;
private object updateLock = new object();
private readonly List locationDtos = new List();
private ObservableCollection itemsControlItems;
//消息提示弹窗
private MessageBoxWindow messageBoxWindow ;
//3楼向其他楼层输出托盘流程时,AGV把托盘放置到接驳位后,在调度界面增加“托盘入轿厢等待确认”提示信息
int systemRunTimerCount = 0;
System.Timers.Timer systemRunTimer = new System.Timers.Timer(1000 * 60);
//人工叫料选中类
public class SelectItemModel
{
//料箱位置id
public long baseLocationId { get; set; }
//托盘号
public string palletInfoCode { get; set; }
}
private void ScanMessage()
{
while (true)
{
try
{
if (SystemData.isUpdate)
{
if (!string.IsNullOrEmpty(SystemData.message))
{
Dispatcher.Invoke(() =>
{
var focusedElement = FocusManager.GetFocusedElement(this);
if (focusedElement is TextBox textBox)
{
textBox.Text = SystemData.message;
SystemData.isUpdate = false;
}
});
}
}
}
catch (Exception ex)
{
LogManager.Error(ex);
}
Thread.Sleep(500);
}
}
private string selectedId;
//FormShowSelect formSelect;
// public static int WeekNo = CommonHelper.WeekOfYear(DateTime.Now, new System.Globalization.CultureInfo("zh-CN"));
public FormBoardT(IHost host)
{
this._host = host;
InitializeComponent();
InventoryMaterialWindow.RefreshInventoryListEvent += GetInvertoryData;
AddTask.RefreTaskListEvent += GetTask;
systemRunTimer.Elapsed += new System.Timers.ElapsedEventHandler(CalculateTaskWaitTime);
systemRunTimer.AutoReset = true;
systemRunTimer.Enabled = true;
systemRunTimer.Start();
}
///
/// 3楼向其他楼层输出托盘流程时,AGV把托盘放置到接驳位后,在调度界面增加“托盘入轿厢等待确认”提示信息
/// 计算任务等待时长
///
///
///
///
private void CalculateTaskWaitTime(object? sender, ElapsedEventArgs e)
{
try
{
using var scope = _host.Services.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService();
// 给提升机已经下发入库指令,判断超时4分钟
var task = dbContext.WcsTask.Where(t => t.nextPointId == 6 && t.taskStatus==2).FirstOrDefault();
if (task != null)
{
if (systemRunTimerCount++ == 4 )
{
Dispatcher.Invoke(() =>
{
messageBoxWindow = new MessageBoxWindow($"{task.fromFloorNo}楼下发入库指令,超过5分钟未反馈,请前往{task.fromFloorNo}楼点击蓝色确认按钮,或排查提升机故障");
messageBoxWindow.Show();
});
}
}
else
{
systemRunTimerCount = 0;
// 如果 task 为空并且窗口是可见的,关闭窗口
if (messageBoxWindow !=null)
{
Dispatcher.Invoke(() =>
{
messageBoxWindow.Close();
});
messageBoxWindow = null;
systemRunTimerCount = 0;
}
}
}
catch (Exception ex)
{
HandyControl.Controls.MessageBox.Error($"计算系统运行时长异常:{ex.Message}");
}
}
///
/// 页面加载事件
///
///
///
private void FormBoard_Loaded(object sender, RoutedEventArgs e)
{
InitializeData(1);
this.WareHouseId.ItemsSource = new List
{
"二楼仓库","三楼仓库","五楼仓库"
};
this.WarehourseId.Items.Refresh();
this.WareHouseId.SelectedIndex = 0;
if (SystemData.NeedLogin)
{
//对MenuList重新赋值
}
foreach (var item in this.TabControl.Items)
{
if (item is TabItem tabItem)
{
var hearder = tabItem.Header?.ToString();
if (hearder != null && SystemData.MenuList.Contains(hearder))
{
tabItem.Visibility = Visibility.Visible;
}
else
{
tabItem.Visibility = Visibility.Collapsed;
}
}
}
QueryPositionCombox.SelectedIndex = 0; // 设置默认选择为 "南侧"
try
{
itemsControlItems = new ObservableCollection();
itemsControl.ItemsSource = itemsControlItems;
Task.Run(() =>
{
foreach (var plcConfig in SystemData.PlcConfigs)
{
if (!SystemData.PlcDic.Any(t => t.Key == plcConfig.Code))
{
Plc.S7.Plc plc;
plc = new Plc.S7.Plc(plcConfig.CpuType, plcConfig.IP, plcConfig.Port, plcConfig.Rack, plcConfig.Slot);
try
{
plc.OpenAsync();
}
catch (Exception ex)
{
LogManager.Error(ex);
}
SystemData.PlcDic.TryAdd(plcConfig.Code, plc);
}
};
});
GetMenu();
GetTask();
DispatcherTimer dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(ShowTime); //委托刷新时间方法
dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 1000);
dispatcherTimer.Start();
Thread AgvStatusThread = new Thread(AgvStatus)
{
IsBackground = true,
};
AgvStatusThread.Start();
Thread ddjThread = new Thread(ddjTimer)
{
IsBackground = true,
};
ddjThread.Start();
Thread RefreshPlcThread = new Thread(RefreshPlc)
{
IsBackground = true,
};
RefreshPlcThread.Start();
Thread OutOrderThread = new Thread(OutOrderTimer)
{
IsBackground = true
};
OutOrderThread.Start();
Thread ReturnOrderThread = new Thread(ReturnOrderTimer)
{
IsBackground = true
};
ReturnOrderThread.Start();
Thread taskThread = new Thread(TaskOrderTimer);
taskThread.Start();
//Thread ddjThread = new Thread(ddjTimer);
//ddjThread.Start();
//LogManager.Info($"--------------------------当前时间 :{DateTime.Now} >>> 客户端启动;");
//设置显示任务栏
if (WindowState == WindowState.Normal)
{
MaxHeight = SystemParameters.MaximizedPrimaryScreenHeight;
WindowState = WindowState.Maximized;
}
Task.Run(() =>
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
SystemData.BasePlcpoints = dbContext.BasePlcpoint.ToList();
SystemData.BaseDictionary = dbContext.BaseDictionary.ToList();
SystemData.BaseWareHouse = dbContext.WmsBaseWarehouse.ToList();
SystemData.MesBaseMaterialInfo = dbContext.MesBaseMaterialInfo.Take(100).ToList();
Dispatcher.Invoke(() =>
{
WarehourseId.ItemsSource = SystemData.BaseWareHouse.Where(t => t.warehouseFloor != 1 && t.warehouseFloor != 4).ToList();
});
});
//MaterialName.ItemsSource = SystemData.MesBaseMaterialInfo;
try
{
string ip = NetworkHelper.GetFirstLocalIPv4Address();
if ("192.168.2.26".Equals(ip))
{
// 获取所有可用的串口名称
//string[] portNames = SerialPort.GetPortNames();
////虚拟串口
//virtualSerialPortModel = new SerialPortModel();
//virtualSerialPortModel = new SerialPortModel();
//virtualSerialPortModel.PortName = "COM1";
//virtualSerialPortModel.BaudRate = 9600;
//virtualSerialPortModel.DataBits = 8;
//virtualSerialPortModel.Parity = Parity.None;
//virtualSerialPortModel.StopBits = StopBits.One;
//serialPortHelper = new SerialPortHelper();
//serialPortHelper.OpenVirtualMyConn(virtualSerialPortModel);
serialPortModel = new SerialPortModel();
serialPortModel.PortName = "COM1";
serialPortModel.BaudRate = 9600;
serialPortModel.DataBits = 8;
serialPortModel.Parity = Parity.None;
serialPortModel.StopBits = StopBits.One;
serialPortHelper = new SerialPortHelper();
serialPortHelper.OpenMyConn(serialPortModel);
Thread scanThread = new Thread(ScanMessage);
scanThread.IsBackground = true;
scanThread.Start();
}
}
catch (Exception ex)
{
HandyControl.Controls.MessageBox.Error("条码枪连接失败");
}
Task.Run(() =>
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
while (true)
{
try
{
dbContext.ChangeTracker.Clear();
int waitCtuCount = dbContext.WcsTask.Where(t => t.taskType == 30).Where(t => t.useFlag == 0).Where(t => t.taskStatus == 0).Count();
Dispatcher.Invoke(() =>
{
outTaskCount.Text = waitCtuCount.ToString();
});
}
catch
{
}
Thread.Sleep(3000);
}
});
try
{
GetPersonCallMaterialData();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
//加载dategrid信息
//LoadMaterial_GetMessage("");
//连接PLC判断
// var plc = new Khd.Core.Plc.S7.Plc((CpuType)PlcConfig.CpuType, PlcConfig.IP, PlcConfig.Port,
// PlcConfig.Rack, PlcConfig.Slot);
// //plc.Open();
// //if (!plc.IsConnected)
// //{
// // HandyControl.Controls.MessageBox.Show("PLC连接失败,重新连接");
// //}
// //else
// //{
// // this._plc = plc;
// //}
// using var scope = _host.Services.CreateScope();
// using var dbContext = scope.ServiceProvider.GetRequiredService();
// basePlcpoints = dbContext.BasePlcpoint.Where(t => t.isDelete == 0).ToList();
// //var baseMaterials = dbContext.BaseMaterial.Where(t => t.IsDelete == 0).ToList();
////
// PLCMessage = new DispatcherTimer();
// PLCMessage.Tick += new EventHandler(PLCmessage); //委托获取点位方法
// PLCMessage.Interval = new TimeSpan(0, 0, 0, 0, 1000);
// PLCMessage.Start();
// UPMessageTimer = new DispatcherTimer();
// UPMessageTimer.Tick += new EventHandler(UpMessage); //委托刷新上件记录
// UPMessageTimer.Interval = new TimeSpan(0, 0, 0, 0, 2000);
// UPMessageTimer.Start();
// Button_Click_1(null, null);
// SetTime();
// List list = new List
// {
// "101上件点",
// "102上件点",
// "103上件点"
// };
}
catch (Exception ex)
{
HandyControl.Controls.MessageBox.Error(ex.Message);
}
}
private void TaskOrderTimer(object? obj)
{
while (true)
{
try
{
GetTask();
}
catch
{
}
Thread.Sleep(1000 * 20);
}
}
///
/// 检查版本
///
public static void CheckVersion()
{
try
{
string version = HttpHelper.SendGetMessage("172.16.12.100", 5001, "wcs/RecieveRcs/version");
var vs = new Version(version);
var lovs = new Version(SystemData.VerSion);
if (vs > lovs)
{
var result = MessageBox.Show("有新版本是否更新?", "提示", MessageBoxButton.YesNo, MessageBoxImage.Information);
if (result == MessageBoxResult.Yes)
{
Process.Start("AutoUpdate.exe", new List
{
version,
SystemData.ProcessName,
"http://172.16.12.100:5001/wcs/RecieveRcs?fileName=Khd.Core.Wpf.zip"
});
Application.Current.Shutdown();
Process.GetCurrentProcess().Kill();
}
}
}
catch
{
}
}
#region 库位状态可视化
private void InitializeData(int rowPosition)
{
try
{
LocationsControl.ItemsSource = null;
using var scope = _host.Services.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService();
// 该侧所有库位
var allLocationLists = dbContext.WmsBaseLocation.Where(x => x.warehouseId == 512 && x.locRow == rowPosition).ToList();
allLocationLists = allLocationLists.OrderBy(x => x.layerNum).ThenBy(x => x.locColumn).ToList();
//在库里的库位
var inLocationList = allLocationLists.Where(x => x.ContainerStatus == "1").Select(x => x.locationCode).ToList();
//在库里有库存的库位
var withStockLocationList = dbContext.WmsRawStock.Where(x => x.warehouseId == 512 && inLocationList.Contains(x.locationCode)).Select(x => x.locationCode).Distinct().ToList();
// 在库里无库存的库位
var withoutStockLocationList = inLocationList
.Except(withStockLocationList)
.ToList();
var locations = new List();
for (int i = 0; i < 6 * 36; i++)
{
LocationStatus status = LocationStatus.OutOfStock;
WmsBaseLocation targetLocation = allLocationLists[i];
if (withStockLocationList.Contains(targetLocation.locationCode))
{
status = LocationStatus.InAndStock;
}
if (withoutStockLocationList.Contains(targetLocation.locationCode))
{
status = LocationStatus.EmptyInStock;
}
Visibility isFreeze = targetLocation.locationStatus == "1" ? Visibility.Collapsed : Visibility.Visible;
locations.Add(new Location { LocationId = targetLocation.locationId, Code = targetLocation.locColumn.ToString(), Status = status, isFreeze = isFreeze });
}
LocationsControl.ItemsSource = locations;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void LocationButton_Click(object sender, RoutedEventArgs e)
{
var button = sender as Button;
if (button != null)
{
var location = button.DataContext as Location;
if (location != null)
{
StockWindow window = new StockWindow(_host, location.LocationId);
window.Show();
// MessageBox.Show(location.LocationId.ToString());
}
}
}
private void QueryPositionCombox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// 获取选中的 ComboBoxItem
ComboBox comboBox = sender as ComboBox;
ComboBoxItem selectedItem = comboBox.SelectedItem as ComboBoxItem;
if (selectedItem != null)
{
// 获取选中项的内容和 Tag
string content = selectedItem.Content.ToString();
object tag = selectedItem.Tag;
InitializeData(int.Parse(tag.ToString()));
}
}
#endregion
private void ReturnOrderTimer(object? obj)
{
using var scope = _host.Services.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService();
List baseEquips = dbContext.BaseEquip.Where(t => t.equipType == 10).ToList();
var endStationCodes = baseEquips.Select(t => t.agvPositionCode).ToList();
while (true)
{
try
{
dbContext.ChangeTracker.Clear();
List wmsRawReturns = dbContext.WmsRawReturn.Where(t => endStationCodes.Contains(t.endStationCode))
.Where(t => t.auditStatus == "1")
.Where(t => t.executeStatus == "0" || t.executeStatus == "1")
.Where(t => t.planAmount > t.returnAmount)
.ToList();
List list = wmsRawReturns.Select(t => t.endStationCode).ToList();
List orderIds = wmsRawReturns.Select(t => t.rawReturnId).ToList();
Dispatcher.Invoke(() =>
{
this.ReturnOrder.Text = "待退库单:\n" + list.Distinct().Join("\n");
});
WcsTask? wcsTask = dbContext.WcsTask.Where(x => x.nextPointId == 10 && x.taskType == 48).FirstOrDefault();
if (wcsTask != null)
{
List wmsRawReturnList = wmsRawReturns.Where(x => x.endStationCode == wcsTask.currPointNo).ToList();
if (wmsRawReturnList != null && wmsRawReturnList.Count > 0)
{
List materialIds = wmsRawReturnList.Select(t => t.materialId).ToList();
List mesBaseMaterialInfos = dbContext.MesBaseMaterialInfo.Where(t => materialIds.Contains(t.MaterialId)).ToList();
var rawReturnPageInfos = from a in mesBaseMaterialInfos
from b in wmsRawReturnList
where a.MaterialId == b.materialId
select new
{
materiaName = a.MaterialName,
materialSpec = a.MaterialSpec,
outstockAmount = b.planAmount,
realOutstockAmount = b.returnAmount,
endStationCode = b.endStationCode
};
Dispatcher.Invoke(() =>
{
this.ReturnTaskNumber.ItemsSource = rawReturnPageInfos;
this.ReturnTaskNumber.Items.Refresh();
});
}
else
{
Dispatcher.Invoke(() =>
{
this.ReturnTaskNumber.ItemsSource = null;
this.ReturnTaskNumber.Items.Refresh();
});
}
}
//var baseEquip = dbContext.BaseEquip.First(t => t.objid == 10);
//if (!string.IsNullOrEmpty(baseEquip.endStationCode))
//{
// List wcsTasks = dbContext.WcsTask.Where(t => t.taskType == 30).Where(t => orderIds.Contains(t.orderId)).ToList();
// List containerNos = wcsTasks.Select(t => t.containerNo).ToList();
// List wmsRawStocks = dbContext.WmsRawStock.Where(t => containerNos.Contains(t.palletInfoCode)).ToList();
// var thisOutList = wmsRawStocks.GroupBy(t => new { t.materialId, t.saleOrderId })
// .Select(t => new
// {
// materialId = t.Key.materialId,
// saleOrderId = t.Key.saleOrderId,
// thisOutAmount = t.Sum(x => x.totalAmount) - t.Sum(x => x.frozenAmount)
// });
// List endStationCodeOutRaw = wmsRawReturns.Where(t => baseEquip.endStationCode.Contains(t.endStationCode)).ToList();
// List materialIds = endStationCodeOutRaw.Select(t => t.materialId).ToList();
// List mesBaseMaterialInfos = dbContext.MesBaseMaterialInfo.Where(t => materialIds.Contains(t.MaterialId)).ToList();
// var bill = endStationCodeOutRaw.GroupBy(t => new { t.materialId })
// .Select(t => new
// {
// materialId = t.Key.materialId,
// outstockAmount = t.Sum(x => x.returnAmount),
// realOutstockAmount = t.Sum(x => x.planAmount),
// });
// var orderNumber = from a in bill
// from b in thisOutList
// from c in mesBaseMaterialInfos
// where a.materialId == b.materialId
// select new
// {
// materialBatch = c.MaterialCode,
// saleOrderId = b.saleOrderId,
// outstockAmount = a.outstockAmount,
// materialSpec = c.MaterialSpec,
// realOutstockAmount = a.realOutstockAmount,
// thisOutAmount = b.thisOutAmount,
// };
// Dispatcher.Invoke(() =>
// {
// this.ReturnTaskNumber.ItemsSource = orderNumber;
// this.ReturnTaskNumber.Items.Refresh();
// });
//}
//else
//{
// Dispatcher.Invoke(() =>
// {
// this.ReturnTaskNumber.ItemsSource = null;
// this.ReturnTaskNumber.Items.Refresh();
// });
//}
}
catch
{
}
Thread.Sleep(2000);
}
}
private void OutOrderTimer(object? obj)
{
using var scope = _host.Services.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService();
List baseEquips = dbContext.BaseEquip.Where(t => t.equipType == 10).ToList();
var endStationCodes = baseEquips.Select(t => t.agvPositionCode).ToList();
while (true)
{
try
{
dbContext.ChangeTracker.Clear();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 10);
List wmsRawOutstocks = dbContext.WmsRawOutstock
.Where(t => endStationCodes.Contains(t.endStationCode))
.Where(t => t.auditStatus == "1")
.Where(t => t.executeStatus == "0" || t.executeStatus == "1")
.Where(t => t.outstockAmount > t.realOutstockAmount)
.ToList();
List list = wmsRawOutstocks.Select(t => t.endStationCode).ToList();
Dispatcher.Invoke(() =>
{
this.OutEndStations.ItemsSource = null;
this.OutEndStations.Items.Clear();
this.OutEndStations.ItemsSource = list.Distinct().OrderBy(t => t).Select(t => new
{
EndStationName = t,
ForeColor = baseEquip.endStationCode == null ? Brushes.Black : baseEquip.endStationCode.Contains(t) ? Brushes.Red : Brushes.Black
});
this.OutEndStations.Items.Refresh();
});
wmsRawOutstocks = wmsRawOutstocks
.Where(t => baseEquip.endStationCode.Contains(t.endStationCode))
.ToList();
List orderIds = wmsRawOutstocks.Select(t => t.rawOutstockId).ToList();
var endStations = wmsRawOutstocks.Select(t => new
{
t.rawOutstockId,
orderId = t.saleOrderId,
t.materialId,
t.endStationCode
});
string nowStationCode = baseEquip.endStationCode;
//if (!string.IsNullOrEmpty(nowStationCode))
//{
// Dispatcher.Invoke(() =>
// {
// SelectOutButton.Content = "当前:" + nowStationCode;
// //SelectOutButton.IsEnabled = false;
// });
//}
//else
//{
// Dispatcher.Invoke(() =>
// {
// SelectOutButton.Content = "选择出库";
// //SelectOutButton.IsEnabled = true;
// });
//}
if (!string.IsNullOrEmpty(baseEquip.endStationCode))
{
#region 待测试
//找出本工位的申请单
List RawOutstocks = wmsRawOutstocks.Where(t => baseEquip.endStationCode.Contains(t.endStationCode)).ToList();
// 根据 materialId 分组,并计算 outstockAmount 和 realOutstockAmount 的总和
var targetRawOutstocks = RawOutstocks
.GroupBy(t => new { t.rawOutstockId, t.materialId, t.saleOrderId, t.outstockAmount, t.realOutstockAmount })
.Select(g => new
{
rawOutStocketId = g.Key.rawOutstockId,
materialId = g.Key.materialId,
saleOrderId = g.Key.saleOrderId,
//totalOutstockAmount = g.Sum(t => t.outstockAmount),
totalOutstockAmount = g.Key.outstockAmount,
//totalRealOutstockAmount = g.Sum(t => t.realOutstockAmount)
totalRealOutstockAmount = g.Key.realOutstockAmount,
applyTime = g.Max(t => t.applyDate)
}).ToList();
//本次所有任务出来的托盘号
List wcsTasks = dbContext.WcsTask.Where(t => t.taskType == 30 && targetRawOutstocks.Select(d => d.materialId).Contains(t.materialId)).ToList();
List containerNos = wcsTasks.Select(t => t.containerNo).ToList();
//本次所有托盘携带的物料
List wmsRawStocks = dbContext.WmsRawStock.Where(t => containerNos.Contains(t.palletInfoCode)).ToList();
// Step 3: 计算每个申请单物料在各个托盘中的数量
var palletMaterialSummary = wmsRawStocks
.GroupBy(t => new { t.materialId, t.palletInfoCode, t.saleOrderId })
.Select(g => new
{
MaterialId = g.Key.materialId,
saleOrderId = g.Key.saleOrderId,
PalletInfoCode = g.Key.palletInfoCode,
//携带总可用库存
canUseAmount = g.Sum(x => x.totalAmount) - g.Sum(x => x.frozenAmount),
})
.ToList();
// 汇总每个申请单在各个托盘的物料数量
var result = targetRawOutstocks
.Select(order => new
{
SaleOrderId = order.saleOrderId,
MaterialId = order.materialId,
//申请数量
RequestedAmount = order.totalOutstockAmount,
//实际已出数量
RealOutstockAmount = order.totalRealOutstockAmount,
// 托盘携带可用信息,用分号分隔
PalletDetails = string.Join("\n", palletMaterialSummary
.Where(pallet => pallet.MaterialId == order.materialId)
.Select(pallet => $"托盘{pallet.PalletInfoCode}数量{string.Format("{0:0.00}", pallet.canUseAmount)}")
),
EndStationCodes = endStations.Where(t => t.rawOutstockId == order.rawOutStocketId).FirstOrDefault()?.endStationCode,
ApplyTime = order.applyTime,
//EndStationCodes = string.Join(",", endStations.Where(t => t.materialId == order.materialId && t.orderId == order.saleOrderId).Select(t => t.endStationCode).ToList())
}).ToList();
var list1 = new List();
try
{
list1 = JsonConvert.DeserializeObject>(nowStationCode);
}
catch
{
}
List materialIds = RawOutstocks.Select(t => t.materialId).ToList();
List mesBaseMaterialInfos = dbContext.MesBaseMaterialInfo.Where(t => materialIds.Contains(t.MaterialId)).ToList();
var orderNumber = from r in result
from m in mesBaseMaterialInfos
where r.MaterialId == m.MaterialId
select new
{
materiaName = m.MaterialName,
materialSpec = m.MaterialSpec,
saleOrderId = r.SaleOrderId,
outstockAmount = string.Format("{0:0.00}", r.RequestedAmount),
realOutstockAmount = string.Format("{0:0.00}", r.RealOutstockAmount),
isSendOver = r.RequestedAmount <= r.RealOutstockAmount ? "已出完" : "未出完",
thisOutAmount = r.PalletDetails,
EndStationCodes = r.EndStationCodes,
ApplyTime = r.ApplyTime,
};
#endregion
//List wcsTasks = dbContext.WcsTask.Where(t => t.taskType == 30).Where(t => orderIds.Contains(t.orderId)).ToList();
//List containerNos = wcsTasks.Select(t => t.containerNo).ToList();
//List wmsRawStocks = dbContext.WmsRawStock.Where(t => containerNos.Contains(t.palletInfoCode)).ToList();
//var thisOutList = wmsRawStocks.GroupBy(t => new { t.materialId, t.saleOrderId,t.palletInfoCode })
// .Select(t => new
// {
// palletInfoCode = t.Key.palletInfoCode,
// materialId = t.Key.materialId,
// saleOrderId = t.Key.saleOrderId,
// thisOutAmount = t.Sum(x => x.totalAmount) - t.Sum(x => x.frozenAmount)
// });
//List endStationCodeOutRaw = wmsRawOutstocks.Where(t => t.endStationCode == baseEquip.endStationCode).ToList();
//List materialIds = endStationCodeOutRaw.Select(t => t.materialId).ToList();
//List mesBaseMaterialInfos = dbContext.MesBaseMaterialInfo.Where(t => materialIds.Contains(t.MaterialId)).ToList();
//var bill = endStationCodeOutRaw.GroupBy(t => new { t.materialId, t.materialBatch, t.saleOrderId })
// .Select(t => new
// {
// materialId = t.Key.materialId,
// materialBatch = t.Key.materialBatch,
// saleOrderId = t.Key.saleOrderId,
// outstockAmount = t.Sum(x => x.outstockAmount),
// realOutstockAmount = t.Sum(x => x.realOutstockAmount),
// });
//var orderNumber = from a in bill
// from b in thisOutList
// from c in mesBaseMaterialInfos
// where a.materialId == b.materialId && a.saleOrderId == b.saleOrderId && a.materialId ==c.MaterialId
// select new
// {
// palletInfoCode = b.palletInfoCode,
// materialBatch = a.materialBatch,
// saleOrderId = b.saleOrderId,
// outstockAmount = a.outstockAmount,
// materialSpec = c.MaterialSpec,
// realOutstockAmount = a.realOutstockAmount,
// thisOutAmount = b.thisOutAmount,
// isSendOver = a.outstockAmount <= (a.realOutstockAmount + b.thisOutAmount) ? "已出完" : "未出完"
// };
Dispatcher.Invoke(() =>
{
try
{
this.OutTaskNumber.ItemsSource = orderNumber.OrderBy(t => t.EndStationCodes.Contains(list1[0]) ? 1 : 99); //.OrderByDescending(x=>x.ApplyTime);
}
catch
{
this.OutTaskNumber.ItemsSource = orderNumber;
}
this.OutTaskNumber.Items.Refresh();
});
}
else
{
Dispatcher.Invoke(() =>
{
this.OutTaskNumber.ItemsSource = null;
this.OutTaskNumber.Items.Refresh();
});
}
}
catch
{
}
Thread.Sleep(1000);
}
}
Dictionary agvDic = new Dictionary
{
{"6011","五楼潜伏" },
{"2034","五楼叉车" },
{"8161","五楼CTU" },
{"2032","三楼叉车" },
{"2033","二楼叉车" },
};
private void AgvStatus()
{
using var scope = _host.Services.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService();
var alarmInfo = dbContext.DmsBaseAlarmRule.Where(t => t.DeviceId == -1).ToList();
while (true)
{
try
{
dbContext.ChangeTracker.Clear();
var wcsAgvStatuses = dbContext.WcsAgvStatus.ToList();
var list = wcsAgvStatuses.Select(
t => new
{
Battery = t.Battery,
Speed = t.Speed,
Status = alarmInfo.FirstOrDefault(d => d.Status?.ToString() == t.Status)?.StatusWord,
Stop = t.Stop == "1" ? "停止" : "运行",
DateNow = t.DateNow?.ToString("yyyy-MM-dd HH:mm:ss"),
ExclType = t.ExclType,
MapCode = t.MapCode == "EE" ? "五楼" : t.MapCode == "BB" ? "三楼" : "二楼",
Online = t.Online.ToUpper() == "TRUE" ? "在线" : "离线",
robotIp = t.robotIp,
Path2 = t.Path2,
RobotCode = agvDic[t.RobotCode],
PosX = t.PosX,
PosY = t.PosY,
PodDir = t.PodDir,
RobotDir = t.RobotDir,
PodCode = t.PodCode,
}
).ToList();
Dispatcher.Invoke(() =>
{
this.AgvDataGrid.ItemsSource = list;
this.AgvDataGrid.Items.Refresh();
});
}
catch
{
}
Thread.Sleep(3000);
}
}
private void ddjTimer()
{
using var scope = _host.Services.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService();
while (true)
{
try
{
lock (updateLock)
{
dbContext.ChangeTracker.Clear();
SystemData.BaseEquip = dbContext.BaseEquip.ToList();
BaseEquip baseEquip = SystemData.BaseEquip.First(t => t.objid == 40);
Dispatcher.Invoke(() =>
{
EquipListSelectDy.ItemsSource = SystemData.BaseEquip.Where(t => t.equipType == 2 || t.equipType == 4 || t.equipType == 5 || t.equipType == 6 || t.equipType == 11);
this.firstRFID.Text = SystemData.BaseEquip.First(t => t.objid == 1).containerNo;
this.DDJEmptyCount.Text = baseEquip.emptyCount.ToString();
if (baseEquip.emptyCount == 0)
{
this.OneIn.IsEnabled = true;
this.SomeIn.IsEnabled = true;
this.OneOut.IsEnabled = false;
this.SomeOut.IsEnabled = false;
}
else if (baseEquip.emptyCount > 0 && baseEquip.emptyCount < 10)
{
this.OneIn.IsEnabled = true;
this.SomeIn.IsEnabled = false;
this.OneOut.IsEnabled = true;
this.SomeOut.IsEnabled = true;
}
else if (baseEquip.emptyCount >= 10)
{
this.OneIn.IsEnabled = false;
this.SomeIn.IsEnabled = false;
this.OneOut.IsEnabled = true;
this.SomeOut.IsEnabled = true;
}
this.EmptyEquip.ItemsSource = SystemData.BaseEquip.Where(t => t.equipType == 20 || t.equipType == 19).Select(
t => new BaseEquip
{
objid = t.objid,
equipName = t.equipName,
emptyCount = t.emptyCount,
equipType = t.equipType,
ud3 = t.ud3 == "0" ? "空" : t.ud3 == "1" ? "托盘" : t.ud3 == "2" ? "废料" : "未知",
equipNo = t.equipNo,
floorNo = t.floorNo,
containerNo = t.containerNo,
}
).OrderBy(t => t.equipNo);
this.EmptyEquip.Items.Refresh();
});
}
}
catch
{
}
Thread.Sleep(3000);
}
}
private void ShowTime(object? sender, EventArgs e)
{
try
{
this.LabDate.Text = DateTime.Now.Date.ToString("yyyy-MM-dd");
this.LabTime.Text = DateTime.Now.ToString("HH:mm:ss");
}
catch
{
}
}
///
/// 显示序号事件
///
///
///
private void dgData_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.Header = e.Row.GetIndex() + 1;
}
///
/// 点击退出按钮
///
///
///
private void btnExit_Click(object sender, RoutedEventArgs e)
{
if (HandyControl.Controls.MessageBox.Show("是否确认关闭程序", "提示信息", MessageBoxButton.YesNo, MessageBoxImage.Information) == MessageBoxResult.Yes)
{
System.Environment.Exit(System.Environment.ExitCode);
}
}
private void Close(object sender, EventArgs e)
{
System.Environment.Exit(System.Environment.ExitCode);
}
public int i = 0;
///
/// 查询任务
///
///
///
private void btnGetTask_Click(object sender, RoutedEventArgs e)
{
GetTask();
}
//private void GetTaskLog()
//{
// try
// {
// using var scope = _host.Services.CreateScope();
// using var dbContext = scope.ServiceProvider.GetRequiredService();
// List wcsTaskLogs = new List();
// for (int i = 1; i <= 5; i++)
// {
// BasePlcpoint basePlcpoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "RFID00" + i);
// string? rifd = SystemData.PlcDic[0].ReadRFID(basePlcpoint.plcpointAddress);
// string floor = i.ToString();
// var wcsTaskLog = dbContext.WcsTaskLog.FirstOrDefault(t => t.ud3 == "1" && t.ud2 == floor && t.containerNo == rifd);
// if (wcsTaskLog != null)
// {
// wcsTaskLogs.Add(wcsTaskLog);
// }
// }
// this.WcsTaskLogDataGrid.ItemsSource = wcsTaskLogs;
// this.WcsTaskLogDataGrid.Items.Refresh();
// if (wcsTaskLogs.Count == 0)
// {
// HandyControl.Controls.MessageBox.Show("未查询到数据");
// }
// }
// catch (Exception ex)
// {
// if (ex is PlcException)
// {
// try
// {
// SystemData.PlcDic[0] = new Plc.S7.Plc(SystemData.PlcDic[0].CPU, SystemData.PlcDic[0].IP, SystemData.PlcDic[0].Port, SystemData.PlcDic[0].Rack, SystemData.PlcDic[0].Slot);
// SystemData.PlcDic[0].Open();
// GetTaskLog();
// }
// catch
// {
// HandyControl.Controls.MessageBox.Show("PLC连接失败,无法读取任务");
// }
// }
// }
//}
private void GetTask()
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
Dispatcher.Invoke(() =>
{
var equipCode = lba_ThrifTtitle1.Text;
var palletNo = lba_ThrifTtitle2.Text;
long? nextPointId = 0;
if (this.EquipListSelectDy.SelectedItem is BaseEquip baseEquip)
{
nextPointId = baseEquip.objid;
}
var data = dbContext.WcsTask
.WhereIf(nextPointId != 0, t => t.nextPointId == nextPointId)
.Where(t => t.IsDelete != 1)
.Where(t => t.containerNo.Contains(palletNo) && t.equipmentNo.Contains(equipCode)).ToList();
List taskModel = CoreMapper.Map>(data);
SelectedItem.Clear();
foreach (var item in taskModel)
{
SelectedItem.Add(item.objid, false);
if (item.nextPointId == 6)
{
item.isShow = Visibility.Visible;
}
else
{
item.isShow = Visibility.Collapsed;
}
}
this.LoadMaterial0.ItemsSource = null;
this.LoadMaterial0.ItemsSource = taskModel;
this.LoadMaterial0.Items.Refresh();
});
}
///
/// 删除任务
///
///
///
private void btnDelTask_Click(object sender, RoutedEventArgs e)
{
if (LoadMaterial0.SelectedIndex == -1)
{
HandyControl.Controls.MessageBox.Show("请选择要删除的任务!");
}
else
{
MessageBoxResult MessageBoxResult = HandyControl.Controls.MessageBox.Show("确定要删除这些任务吗?", "提示信息", MessageBoxButton.YesNo);
if (MessageBoxResult == MessageBoxResult.Yes)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
List ids = new List();
foreach (var item in SelectedItem)
{
if (item.Value == true)
{
ids.Add(item.Key);
}
}
BaseEquip agvEquip = SystemData.BaseEquip.First(t => t.objid == 10);
List wcsTasks = dbContext.WcsTask.Where(t => ids.Contains(t.objid)).ToList();
foreach (var item in wcsTasks)
{
item.IsDelete = 1;
dbContext.Update(item);
dbContext.SaveChanges();
}
GetTask();
}
else
{
}
}
}
///
/// 完成任务
///
///
///
private void btnFinishTask_Click(object sender, RoutedEventArgs e)
{
if (LoadMaterial0.SelectedIndex == -1)
{
HandyControl.Controls.MessageBox.Show("请选择要完成的任务!");
}
else
{
var Currentselected = LoadMaterial0.SelectedItem as WcsTask;
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
Currentselected.taskStatus = 5;
dbContext.Update(Currentselected);
dbContext.SaveChanges();
GetTask();
}
}
///
/// 查询设备信息
///
///
///
private void btnGetEquip_Click(object sender, RoutedEventArgs e)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
var equipCode = lba_ThrifTtitle3.Text;
var data = dbContext.BaseEquip.Where(t => t.useFlag == 1 && t.equipNo.Contains(equipCode)).ToList();
this.LoadMaterial3.ItemsSource = null;
this.LoadMaterial3.ItemsSource = data;
this.LoadMaterial3.Items.Refresh();
if (data.Count == 0)
{
HandyControl.Controls.MessageBox.Show("未查询到数据");
}
}
///
/// 查询库存信息
///
///
///
private void btnGetStocK_Click(object sender, RoutedEventArgs e)
{
//Pagination1.PageIndex = 1;
this.PageControl1.PageInfo.CurrentPage = 1;
this.EquipListSelectDy.SelectedIndex = -1;
locationDtos.Clear();
GetBaseLocations();
}
///
/// 获取库位信息
///
private void GetBaseLocations()
{
if (WarehourseId.SelectedItem is WmsBaseWarehouse warehouse)
{
var scope = _host.Services.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService();
var locationCode = lba_ThrifTtitle6.Text;
string sql;
if (productIds.Contains(warehouse.warehouseId))
{
sql = $@"select distinct t1.location_id LocationId,
t1.location_code LocationCode,
t1.location_status LocationStatus,
t1.warehouse_floor FloorNo,
t2.pallet_info_code ContainerCode,
t2.material_id MaterialId,
t2.sale_order_id SaleOrderId
from wms_base_location t1
left join wms_raw_stock t2
on t1.location_code = t2.location_code
where t1.warehouse_id = {warehouse.warehouseId}";
}
else
{
sql = $@"select distinct t1.location_id LocationId,
t1.location_code LocationCode,
t1.warehouse_floor FloorNo,
t1.location_status LocationStatus,
t2.pallet_info_code ContainerCode,
t2.product_id MaterialId,
t2.sale_order_id SaleOrderId
from wms_base_location t1
left join wms_product_stock t2
on t1.location_code = t2.location_code
where t1.warehouse_id = {warehouse.warehouseId}";
}
if (!string.IsNullOrEmpty(locationCode))
{
sql += " and t1.location_code like '%" + locationCode + "%'";
}
if (!string.IsNullOrEmpty(this.locationStatus.SelectedItem?.ToString()))
{
if (this.locationStatus.SelectedItem is ComboBoxItem item && !string.IsNullOrEmpty(item.Tag?.ToString()))
{
sql += " and t1.location_status = " + item.Tag + "";
}
}
var data = dbContext.ExecuteSqlQuery(sql);
int sum = data.Count;
data = data.Skip((this.PageControl1.PageInfo.CurrentPage - 1) * this.pageCount).Take(this.pageCount).ToList();
data.ForEach(t =>
{
t.LocationStatus = SystemData.LocationStatusDic.GetValueOrDefault(t.LocationStatus, "未知");
});
this.PageControl1.PageInfo.TotalPage = (sum / pageCount) + (sum % pageCount == 0 ? 0 : 1);
this.LoadMaterial1.ItemsSource = null;
this.LoadMaterial1.ItemsSource = data;
this.LoadMaterial1.Items.Refresh();
if (data.Count == 0)
{
HandyControl.Controls.MessageBox.Show("未查询到数据");
}
}
else
{
HandyControl.Controls.MessageBox.Show("请选择仓库!");
return;
}
}
/////
///// 查询指令信息
/////
/////
/////
//private void btnGetWcsCmd_Click(object sender, RoutedEventArgs e)
//{
// GetWcsCmd();
//}
//private void GetWcsCmd()
//{
// using var scope = _host.Services.CreateScope();
// using var dbContext = scope.ServiceProvider.GetRequiredService();
// var equipCode = txtEquipNo.Text;
// var ContainNo = txtContainNo.Text;
// var data = dbContext.WcsCmd.Where(t => t.useFlag == 1 && t.containerNo.Contains(ContainNo) && t.equipmentNo.Contains(equipCode)).ToList();
// this.LoadMaterial.ItemsSource = null;
// this.LoadMaterial.ItemsSource = data;
// this.LoadMaterial.Items.Refresh();
// if (data.Count == 0)
// {
// HandyControl.Controls.MessageBox.Show("未查询到数据");
// }
//}
/////
///// 删除指令
/////
/////
/////
//private void btnDelCmd_Click(object sender, RoutedEventArgs e)
//{
// if (LoadMaterial.SelectedIndex == -1)
// {
// HandyControl.Controls.MessageBox.Show("请选择要删除的指令!");
// }
// else
// {
// var Currentselected = LoadMaterial.SelectedItem as WcsCmd;
// using var scope = _host.Services.CreateScope();
// using var dbContext = scope.ServiceProvider.GetRequiredService();
// Currentselected.useFlag = 0;
// dbContext.WcsCmd.Update(Currentselected);
// dbContext.SaveChanges();
// GetWcsCmd();
// }
//}
/////
///// 重发指令
/////
/////
/////
//private void btnReSendCmd_Click(object sender, RoutedEventArgs e)
//{
// if (LoadMaterial.SelectedIndex == -1)
// {
// HandyControl.Controls.MessageBox.Show("请选择要重发的指令!");
// }
// else
// {
// var Currentselected = LoadMaterial.SelectedItem as WcsCmd;
// using var scope = _host.Services.CreateScope();
// using var dbContext = scope.ServiceProvider.GetRequiredService();
// Currentselected.sendFlag = 0;
// dbContext.WcsCmd.Update(Currentselected);
// dbContext.SaveChanges();
// GetWcsCmd();
// }
//}
/////
///// 呼叫料箱
/////
/////
/////
//private void btnCallBox_Click(object sender, RoutedEventArgs e)
//{
// try
// {
// if (!string.IsNullOrEmpty(callMaterialId.Text))
// {
// using var scope = _host.Services.CreateScope();
// using var dbContext = scope.ServiceProvider.GetRequiredService();
// if (int.TryParse(txtNum.Text, out int num))
// {
// WmsRawOutstock wmsRawOutstock = new WmsRawOutstock()
// {
// rawOutstockId = _jcSnowId.NextId(),
// taskCode = "task",
// warehouseId = 512,
// materialId = Convert.ToInt32(callMaterialId.Text),
// outstockAmount = Convert.ToInt32(txtNum.Text),
// realOutstockAmount = 0,
// endStationCode = "FL052",
// auditStatus = "0",
// operationType = "1",
// taskType = "1",
// executeStatus = "0"
// };
// dbContext.Add(wmsRawOutstock);
// dbContext.SaveChanges();
// HandyControl.Controls.MessageBox.Show("料箱呼叫任务添加成功!");
// }
// else
// {
// HandyControl.Controls.MessageBox.Show("请输入有效的数字");
// }
// }
// }
// catch
// {
// }
//}
///
/// 料箱扫描
///
///
///
//private void txtBox_KeyDown(object sender, KeyEventArgs e)
//{
// if (e.Key == Key.Enter)
// {
// txtBarCode.Focus();
// }
//}
/////
///// 条码扫描
/////
/////
/////
//private void txtBarCode_KeyDown(object sender, RoutedEventArgs e)
//{
// try
// {
// if (!string.IsNullOrEmpty(txtBarCode.Text))
// {
// if (!(barcodeLsit.Where(t => t.barcodeInfo == txtBarCode.Text).Count() > 0))
// {
// using var scope = _host.Services.CreateScope();
// using var dbContext = scope.ServiceProvider.GetRequiredService();
// var mesInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.barcodeInfo == txtBarCode.Text).FirstOrDefault();
// if (mesInfo == null)
// {
// HandyControl.Controls.MessageBox.Show("请扫描正确的条码");
// return;
// }
// barcodeLsit.Add(mesInfo);
// txtBarCode.SelectAll();
// txtBarCode.Focus();
// txtScan.Text = $"{(mesInfo.batchFlag == "1" ? 1 : mesInfo.amount)}";
// }
// }
// }
// catch
// {
// }
//}
///
/// 确认
///
///
///
private void btnConfirmBox_Click(object sender, RoutedEventArgs e)
{
//try
//{
// var box = txtBox.Text;
// if (string.IsNullOrEmpty(box))
// {
// HandyControl.Controls.MessageBox.Show("容器号不能为空!");
// return;
// }
// if (barcodeLsit.Count == 0)
// {
// HandyControl.Controls.MessageBox.Show("未扫描条码!");
// return;
// }
// using var scope = _host.Services.CreateScope();
// using var dbContext = scope.ServiceProvider.GetRequiredService();
// WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.warehouseId == 512 && t.containerCode == box).FirstOrDefault();
// if (wmsBaseLocation == null)
// {
// HandyControl.Controls.MessageBox.Show("容器号不存在!,请重新扫描!");
// return;
// }
// if (cbxType.Text == "入库")
// {
// var batchCodes = barcodeLsit.Select(t => t.batchCode);
// List wmsRawStocks = dbContext.WmsRawStock
// .Where(t => batchCodes.Contains(t.instockBatch))
// .Where(t => t.warehouseFloor == 5 && t.warehouseId == 512).ToList();
// if (wmsRawStocks.Count > 0)
// {
// HandyControl.Controls.MessageBox.Show("该批次已入库!");
// return;
// }
// foreach (var item in barcodeLsit)
// {
// WmsRawStock? wmsRawStock = dbContext.WmsRawStock
// .Where(t => t.palletInfoCode == box)
// .Where(t => t.instockBatch == item.batchCode).FirstOrDefault();
// if (wmsRawStock == null)
// {
// var newRawStock = new WmsRawStock()
// {
// materialId = item.materialId,
// supplierId = item.manufacturerId,
// instockBatch = item.batchCode,
// locationCode = wmsBaseLocation.locationCode,
// stockType = "1",
// palletInfoCode = box,
// totalAmount = item.batchFlag == "1" ? 1 : item.amount,
// activeFlag = "1",
// occupyAmount = 0,
// completeFlag = "1",
// frozenAmount = 0,
// instockDate = System.DateTime.Now,
// rawStockId = Global.SnowId.NextId(),
// saleOrderId = item.saleOrderId,
// warehouseFloor = 5,
// warehouseId = 512,
// createBy = "扫描入库",
// createDate = System.DateTime.Now
// };
// dbContext.WmsRawStock.Add(newRawStock);
// }
// else
// {
// HandyControl.Controls.MessageBox.Show("该批次已入库!");
// return;
// }
// }
// dbContext.SaveChanges();
// HandyControl.Controls.MessageBox.Show("入库成功!");
// }
// if (cbxType.Text == "出库")
// {
// long? materialId = barcodeLsit.FirstOrDefault().materialId;
// WmsRawOutstock? wmsRawOutstock = dbContext.WmsRawOutstock
// .Where(t => t.auditStatus == "1")
// .Where(t => t.executeStatus == "1")
// .Where(t => t.warehouseId == 512)
// .Where(t => t.realOutstockAmount < t.outstockAmount)
// .Where(t => t.materialId == materialId)
// .FirstOrDefault();
// if (wmsRawOutstock != null)
// {
// //从料箱里拿出来
// WmsRawStock? wmsRawStock = dbContext.WmsRawStock.Where(t => t.palletInfoCode == box).Where(t => t.materialId == materialId).FirstOrDefault();
// if (wmsRawStock != null)
// {
// dbContext.WmsRawStock.Where(t => t.rawStockId == wmsRawStock.rawStockId).Delete();
// wmsRawOutstock.realOutstockAmount += 1;
// if (wmsRawOutstock.realOutstockAmount >= wmsRawOutstock.outstockAmount)
// {
// wmsRawOutstock.executeStatus = "2";
// wmsRawOutstock.endTime = DateTime.Now;
// }
// dbContext.Update(wmsRawOutstock);
// dbContext.SaveChanges();
// }
// else
// {
// HandyControl.Controls.MessageBox.Show("当前容器不存在当前扫描物料");
// }
// }
// }
// if (cbxType.Text == "回库")
// {
// var batchCodes = barcodeLsit.Select(t => t.batchCode);
// List wmsRawStocks = dbContext.WmsRawStock
// .Where(t => batchCodes.Contains(t.instockBatch))
// .Where(t => t.warehouseFloor == 5 && t.warehouseId == 512).ToList();
// if (wmsRawStocks.Count > 0)
// {
// HandyControl.Controls.MessageBox.Show("该批次已入库!");
// return;
// }
// foreach (var item in barcodeLsit)
// {
// WmsRawStock? wmsRawStock = dbContext.WmsRawStock
// .Where(t => t.palletInfoCode == box)
// .Where(t => t.instockBatch == item.batchCode).FirstOrDefault();
// if (wmsRawStock == null)
// {
// var newRawStock = new WmsRawStock()
// {
// materialId = item.materialId,
// supplierId = item.manufacturerId,
// instockBatch = item.batchCode,
// locationCode = wmsBaseLocation.locationCode,
// stockType = "1",
// palletInfoCode = box,
// totalAmount = item.batchFlag == "1" ? 1 : item.amount,
// activeFlag = "1",
// occupyAmount = 0,
// completeFlag = "1",
// frozenAmount = 0,
// instockDate = System.DateTime.Now,
// rawStockId = Global.SnowId.NextId(),
// saleOrderId = item.saleOrderId,
// warehouseFloor = 5,
// warehouseId = 512,
// createBy = "扫描回库",
// createDate = System.DateTime.Now
// };
// dbContext.WmsRawStock.Add(newRawStock);
// }
// else
// {
// HandyControl.Controls.MessageBox.Show("该批次已入库!");
// return;
// }
// }
// dbContext.SaveChanges();
// HandyControl.Controls.MessageBox.Show("回库成功!");
// }
// barcodeLsit.Clear();
// txtScan.Text = string.Empty;
// txtBarCode.Text = string.Empty;
//}
//catch
//{
//}
}
///
/// 退出程序
///
///
///
private void WindowClose_Click(object sender, RoutedEventArgs e)
{
if (HandyControl.Controls.MessageBox.Show("是否确认关闭程序", "提示信息", MessageBoxButton.YesNo, MessageBoxImage.Information) == MessageBoxResult.Yes)
{
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" + "&exit");
Application.Current.Shutdown();
System.Environment.Exit(System.Environment.ExitCode);
}
}
///
/// 获取聚焦打开键盘
///
///
///
private void TextBoxGetFocus()
{
try
{
Process process = new Process()
{
StartInfo ={
UseShellExecute=true,
FileName="osk.exe"
}
};
process.Start();
}
catch (Exception ex)
{
HandyControl.Controls.MessageBox.Error("打开软键盘时出错: " + ex.Message);
}
}
///
/// 失去焦点,关闭软键盘
///
///
///
private void TextBoxLostFocus(object sender, RoutedEventArgs e)
{
try
{
//将打开的osk.exe进程关闭
Process[] processes = Process.GetProcessesByName("osk");
foreach (Process process in processes)
{
process.Kill();
}
}
catch (Exception ex)
{
HandyControl.Controls.MessageBox.Error("打开软键盘时出错: " + ex.Message);
}
}
///
/// 背负式小车确认完成
///
///
///
private void btnBearConfirmBox_Click(object sender, RoutedEventArgs e)
{
try
{
MessageBoxResult messageBoxResult = HandyControl.Controls.MessageBox.Show("是否确认捡料完成?", "提示信息", MessageBoxButton.YesNo, MessageBoxImage.Information);
if (messageBoxResult == MessageBoxResult.Yes)
{
//剩余出库单
int count = OutTaskNumber.Items.Count;
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
var wcsCmd = dbContext.WcsTask
.Where(t => t.taskStatus == 6 || t.taskStatus == 3)
.Where(t => t.nextPointId == 10)
.FirstOrDefault();
if (wcsCmd == null)
{
HandyControl.Controls.MessageBox.Error("未查询到当前有背负式Agv由装配区到捡料区任务");
}
else
{
if (wcsCmd.taskType == 32)//领料
{
if (count > 0)
{
MessageBoxResult messageBoxResult1 = HandyControl.Controls.MessageBox.Show("本次出库任务是否捡料完成?", "提示信息", MessageBoxButton.YesNo, MessageBoxImage.Information);
if (messageBoxResult1 == MessageBoxResult.Yes)
{
}
//MessageBoxResult messageBoxResult1 = HandyControl.Controls.MessageBox.Show("是否需要背负式小车返回?", "提示信息", MessageBoxButton.YesNoCancel, MessageBoxImage.Information);
//if (messageBoxResult1 == MessageBoxResult.Yes)
//{
// BaseEquip baseEquip = dbContext.BaseEquip.Where(t => t.objid == 10).First();
// List? list = JsonConvert.DeserializeObject>(baseEquip.endStationCode);
// new SelectOutRawForm(_host, "", 3, list).ShowDialog();
// if (string.IsNullOrEmpty(SelectOutRawForm.StationCode))
// {
// return;
// }
// else
// {
// BaseEquip endEquip = dbContext.BaseEquip.First(t => t.equipNo == SelectOutRawForm.StationCode);
// WcsTask wcsTask = CoreMapper.Map(wcsCmd);
// wcsTask.taskStatus = 0;
// wcsTask.createTime = DateTime.Now;
// wcsTask.useFlag = 1;
// wcsTask.objid = Global.SnowId.NextId();
// wcsTask.endPointId = endEquip.objid;
// wcsTask.endPointNo = endEquip.equipNo;
// WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask);
// dbContext.Add(wcsTaskLog);
// dbContext.Add(wcsTask);
// }
//}
//else
{
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 10);
baseEquip.endStationCode = string.Empty;
baseEquip.ud3 = null;
dbContext.Update(baseEquip);
}
}
else
{
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 10);
baseEquip.endStationCode = string.Empty;
baseEquip.ud3 = null;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
}
if (wcsCmd.taskStatus == 3)
{
wcsCmd.taskStatus = 4;
}
}
else if (wcsCmd.taskType == 48)//返库
{
WmsRawReturn? wmsRawReturn = dbContext.WmsRawReturn.Where(t => t.endStationCode == wcsCmd.currPointNo && t.executeStatus!="2").FirstOrDefault();
if (wmsRawReturn != null)
{
wmsRawReturn.executeStatus = "2";
wmsRawReturn.updateDate = DateTime.Now;
wmsRawReturn.endTime = DateTime.Now;
dbContext.WmsRawReturn.Update(wmsRawReturn);
}
if (wcsCmd.taskStatus == 6)
{
wcsCmd.taskStatus = 7;
}
}
dbContext.Update(wcsCmd);
dbContext.SaveChanges();
HandyControl.Controls.MessageBox.Success("背负式Agv任务确认完成成功");
}
}
}
catch (Exception ex)
{
HandyControl.Controls.MessageBox.Error(ex.Message);
}
}
///
/// 获取到所有控件
///
///
///
private async void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// 获取当前选中的TabItem
var selectedTabItem = TabControl.SelectedItem as TabItem;
//if (selectedTabItem != null && selectedTabItem.Name == "TaskManager")
//{ //任务界面
// GetTask();
//}
if (selectedTabItem != null && selectedTabItem.Name == "CallPersonManager")
{ //人工叫料界面
CallSelectedItem.Clear();
//await GetPersonCallMaterialData();
}
else if (selectedTabItem != null && selectedTabItem.Name == "InventoryManager")
{ //盘库界面
GetInvertoryData();
}
}
///
/// 添加任务
///
///
///
private void AddTaskButton_Click(object sender, RoutedEventArgs e)
{
AddTask addTask = new AddTask(_host);
addTask.ShowDialog();
}
/////
///// 清除RFID
/////
/////
/////
//private void clearRFID_Click(object sender, RoutedEventArgs e)
//{
// txtBox.Text = string.Empty;
//}
/////
///// 清除条码
/////
/////
/////
//private void clearBarCode_Click(object sender, RoutedEventArgs e)
//{
// txtScan.Text = string.Empty;
// barcodeLsit.Clear();
// txtBarCode.Text = string.Empty;
//}
/////
///// 人工叫料失去焦点
/////
/////
/////
//private void callMaterialId_LostFocus(object sender, RoutedEventArgs e)
//{
// try
// {
// if (!string.IsNullOrEmpty(callMaterialId.Text))
// {
// using var scope = _host.Services.CreateScope();
// using var dbContext = scope.ServiceProvider.GetRequiredService();
// var material = dbContext.WmsRawStock.Where(t => t.instockBatch == callMaterialId.Text).FirstOrDefault();
// if (material == null)
// {
// HandyControl.Controls.MessageBox.Show("批次号不存在!");
// callMaterialId.Text = string.Empty;
// }
// else
// {
// }
// }
// }
// catch
// {
// }
//}
///
/// 开始任务
///
///
///
private void btnEditTask_Click(object sender, RoutedEventArgs e)
{
try
{
if (LoadMaterial0.SelectedIndex == -1)
{
HandyControl.Controls.MessageBox.Show("请选择要开始的任务!");
}
else
{
var Currentselected = LoadMaterial0.SelectedItem as WcsTask;
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
List wcsTasks = dbContext.WcsTask.ToList();
List ids = new List();
foreach (var item in SelectedItem)
{
if (item.Value == true)
{
WcsTask? wcsTask = wcsTasks.FirstOrDefault();
if (wcsTask != null && wcsTask.taskStatus <= 0)
{
ids.Add(item.Key);
}
}
}
dbContext.WcsTask.Where(t => ids.Contains(t.objid)).Update(t => new WcsTask { useFlag = 1 });
GetTask();
}
}
catch (Exception ex)
{
HandyControl.Controls.MessageBox.Error(ex.Message);
}
}
///
/// 打开任务历史记录界面
///
///
///
private void btnTaskHistory_Click(object sender, RoutedEventArgs e)
{
try
{
TaskHistoryWindow taskHistoryWindow = new TaskHistoryWindow(_host);
taskHistoryWindow.ShowDialog();
}
catch (Exception ex)
{
HandyControl.Controls.MessageBox.Error(ex.Message);
}
}
///
/// 单选
///
///
///
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
if (sender is CheckBox checkbox && LoadMaterial0.SelectedItem is taskModel Currentselected)
{
SelectedItem[Currentselected.objid] = checkbox.IsChecked ?? false;
}
}
///
/// 单选
///
///
///
private void CheckPersonBox_Click(object sender, RoutedEventArgs e)
{
if (sender is CheckBox checkbox)
{
dynamic Currentselected = PersonCallMaterial.SelectedItem;
if (checkbox.IsChecked != null && checkbox.IsChecked.Value)
{
if (itemsControlItems != null && itemsControlItems.Count >= 6)
{
MessageBox.Show("最多只能选择6个");
checkbox.IsChecked = false;
return;
}
CallSelectedItem.Add(Currentselected.baseLocationId);
// 添加选中项
string selectedItem = Currentselected.palletInfoCode;
bool isIn = itemsControlItems.Any(t => t.baseLocationId == Currentselected.baseLocationId);
if (!isIn)
{
itemsControlItems.Add(new SelectItemModel
{
baseLocationId = Currentselected.baseLocationId,
palletInfoCode = Currentselected.palletInfoCode
});
}
}
else
{
CallSelectedItem.Remove(Currentselected.baseLocationId);
// 删除选中项
SelectItemModel model = itemsControlItems.FirstOrDefault(x => x.baseLocationId == Currentselected.baseLocationId);
if (model != null)
{
itemsControlItems.Remove(model);
}
}
}
}
///
/// 删除选中的值
///
///
///
private void DeleteButton_Click(object sender, RoutedEventArgs e)
{
// 获取点击按钮的实例
Button button = sender as Button;
// 从按钮的 Tag 属性中获取当前数据项
SelectItemModel itemToRemove = button.Tag as SelectItemModel;
if (itemToRemove != null)
{
// 从集合中移除数据项
itemsControlItems.Remove(itemToRemove);
}
}
///
/// 刷新
///
///
///
private void RefreshPlc()
{
while (true)
{
try
{
var points = SystemData.BasePlcpoints.OrderBy(t => t.definefield3).ToList();
foreach (var item in points)
{
if (!string.IsNullOrEmpty(item.plcpointAddress))
{
TextBlock? textBlock = null;
Dispatcher.Invoke(() =>
{
foreach (var ch in this.UXX.Children)
{
if (ch is TextBlock tb)
{
if (tb.Name == item.plcpointNo)
{
textBlock = tb;
break;
}
}
}
if (textBlock == null)
{
foreach (var ch in this.TSJ.Children)
{
if (ch is TextBlock tb)
{
if (tb.Name == item.plcpointNo)
{
textBlock = tb;
break;
}
}
}
}
if (textBlock == null)
{
foreach (var ch in this.XBRK.Children)
{
if (ch is TextBlock tb)
{
if (tb.Name == item.plcpointNo)
{
textBlock = tb;
break;
}
}
}
}
if (textBlock == null)
{
foreach (var ch in this.JBW.Children)
{
if (ch is TextBlock tb)
{
if (tb.Name == item.plcpointNo)
{
textBlock = tb;
break;
}
}
}
}
if (textBlock == null)
{
foreach (var ch in this.FZJ.Children)
{
if (ch is TextBlock tb)
{
if (tb.Name == item.plcpointNo)
{
textBlock = tb;
break;
}
}
}
}
});
if (textBlock != null)
{
var plc = SystemData.PlcDic.Values.Where(t => t.IP == item.definefield3).FirstOrDefault();
if (plc != null)
{
try
{
string? result = "";
if (item.plcpointNo.Contains("RFID"))
{
result = plc.ReadRFID(item.plcpointAddress)?.ToString();
}
else
{
result = plc.Read(item.plcpointAddress)?.ToString();
}
Dispatcher.Invoke(() =>
{
textBlock.Text = result == null ? "" : result;
});
}
catch (Exception ex)
{
try
{
if (ex is PlcException)
{
foreach (var item2 in SystemData.PlcDic)
{
if (item2.Value.IP == ex.Message)
{
SystemData.PlcDic[item2.Key] = new Plc.S7.Plc(item2.Value.CPU, item2.Value.IP, item2.Value.Port, item2.Value.Slot, item2.Value.Rack);
SystemData.PlcDic[item2.Key].Open();
break;
}
}
}
}
catch
{
}
}
}
}
}
}
}
catch
{
}
Thread.Sleep(3000);
}
}
///
/// 开始任务
///
///
///
private void btnCtuInConfirmBox_Click(object sender, RoutedEventArgs e)
{
try
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
WcsTask? wcsTask = dbContext.WcsTask.FirstOrDefault(t => t.nextPointId == 11 && t.taskType == 29);
if (wcsTask == null)
{
HandyControl.Controls.MessageBox.Info("未查询到当前有CTU入库任务!");
}
else
{
wcsTask.CTUExecute = "1";
dbContext.Update(wcsTask);
dbContext.SaveChanges();
HandyControl.Controls.MessageBox.Info("CTU入库任务确认完成成功!");
}
}
catch
{
}
}
///
/// 页码改变时
///
///
///
private void Pagination_PageUpdated(object sender, HandyControl.Data.FunctionEventArgs e)
{
GetBaseLocations();
}
///
/// 物料名称
///
///
///
private void MaterialName_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//if(MaterialName.SelectedItem is MesBaseMaterialInfo Currentselected)
//{
// MaterialSpec.ItemsSource = SystemData.MesBaseMaterialInfo.Where(t => t.MaterialName == Currentselected.MaterialName);
//}
//else
//{
// MaterialSpec.ItemsSource = null;
//}
//MaterialSpec.Items.Refresh();
}
///
/// 入库扫描
///
///
///
private void InRawBaseLocaltion_Click(object sender, RoutedEventArgs e)
{
ScanInBox();
}
private void ScanInBox()
{
try
{
if (!string.IsNullOrEmpty(txtInBox.Text) && !string.IsNullOrEmpty(txtInBarCode.Text))
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
if (txtInScan.Text == "")
{
HandyControl.Controls.MessageBox.Error("请先输入数量"); return;
}
decimal amount = decimal.Parse(txtInScan.Text);
// 计算入库后当前总数量,仅用来提示使用
decimal? totalMessage = 0;
if (amount <= 0)
{
HandyControl.Controls.MessageBox.Error("入库数量需大于0");
return;
}
var material = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == txtInBarCode.Text);
var container = dbContext.WmsBaseLocation.FirstOrDefault(t => t.containerCode == txtInBox.Text && t.warehouseId == 512);
List wmsRawStocks = dbContext.WmsRawStock
.Where(t => txtInBarCode.Text == t.instockBatch)
.Where(t => t.warehouseFloor == 5 && t.warehouseId == 512).ToList();
if (container == null)
{
MsgText.Text = "未查询到该容器!";
txtInBox.Focus();
txtInBox.Text = string.Empty;
txtInBarCode.Text = string.Empty;
txtInScan.Text = string.Empty;
this.txtInStoreRemark.Text = string.Empty;
return;
}
if (material == null)
{
MsgText.Text = "未查询到该条码内容!";
txtInBox.Text = string.Empty;
txtInBarCode.Text = string.Empty;
txtInScan.Text = string.Empty;
this.txtInStoreRemark.Text = string.Empty;
txtInBox.Focus();
return;
}
if (wmsRawStocks.Count > 0)
{
if (material.batchFlag != "1")
{
MsgText.Text = $"该条码已入库!料箱号为{wmsRawStocks.First().palletInfoCode},库位号为{wmsRawStocks.First().locationCode}";
txtInBox.Text = string.Empty;
txtInBarCode.Text = string.Empty;
txtInScan.Text = string.Empty;
this.txtInStoreRemark.Text = string.Empty;
txtInBox.Focus();
return;
}
else
{
WmsRawStock wmsRawStock = wmsRawStocks.First();
wmsRawStock.totalAmount += amount;
dbContext.WmsRawStock.Update(wmsRawStock);
var mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == txtInBarCode.Text);
WmsRawInstock wmsRawInstock = new WmsRawInstock()
{
taskCode = Global.SnowId.NextId().ToString(),
materialBarCode = mesBaseBarcodeInfo.barcodeInfo,
materialBatchCode = mesBaseBarcodeInfo.batchCode,
applyBy = "WPF",
applyDate = System.DateTime.Now,
purchaseOrderId = mesBaseBarcodeInfo.PurchaseOrderId,
beginTime = System.DateTime.Now,
endTime = DateTime.Now,
locationCode = container.locationCode,
executeStatus = "2",
instockAmount = amount,
instockType = "1",
materialId = material.materialId,
operationType = "1",
palletInfoCode = container.containerCode,
poNo = mesBaseBarcodeInfo.poNo,
warehouseId = 512,
tips = this.txtInStoreRemark.Text
};
dbContext.Add(wmsRawInstock);
dbContext.SaveChanges();
totalMessage = wmsRawStock.totalAmount;
}
}
else
{
var newRawStock = new WmsRawStock()
{
materialId = material.materialId,
supplierId = material.manufacturerId,
instockBatch = txtInBarCode.Text,
locationCode = container.locationCode,
stockType = "1",
palletInfoCode = container.containerCode,
totalAmount = material.batchFlag == "1" ? amount : 1,
activeFlag = "1",
occupyAmount = 0,
completeFlag = "1",
frozenAmount = 0,
instockDate = System.DateTime.Now,
rawStockId = Global.SnowId.NextId(),
saleOrderId = material.saleOrderId == null ? 0 : material.saleOrderId,
warehouseFloor = 5,
warehouseId = 512,
createBy = "扫描入库",
createDate = System.DateTime.Now,
safeFlag = material.safeFlag
};
dbContext.WmsRawStock.Add(newRawStock);
var mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == txtInBarCode.Text);
WmsRawInstock wmsRawInstock = new WmsRawInstock()
{
taskCode = Global.SnowId.NextId().ToString(),
materialBarCode = mesBaseBarcodeInfo.barcodeInfo,
materialBatchCode = mesBaseBarcodeInfo.batchCode,
applyBy = "WPF",
applyDate = System.DateTime.Now,
purchaseOrderId = mesBaseBarcodeInfo.PurchaseOrderId,
beginTime = System.DateTime.Now,
endTime = DateTime.Now,
locationCode = container.locationCode,
executeStatus = "2",
instockAmount = amount,
instockType = "1",
materialId = material.materialId,
operationType = "1",
palletInfoCode = container.containerCode,
poNo = mesBaseBarcodeInfo.poNo,
warehouseId = 512,
tips = this.txtInStoreRemark.Text
};
dbContext.Add(wmsRawInstock);
dbContext.SaveChanges();
totalMessage = newRawStock.totalAmount;
}
txtInBox.Focus();
MsgText.Text = $"入库成功!当前库存:{totalMessage}";
this.txtInStoreRemark.Text = string.Empty;
txtInBox.Text = string.Empty;
txtInBarCode.Text = string.Empty;
txtInScan.Text = string.Empty;
}
else
{
MsgText.Text = "请先扫描容器号和条码!";
}
}
catch (Exception ex)
{
LogManager.Error(ex);
txtInBox.Text = string.Empty;
txtInBarCode.Text = string.Empty;
txtInScan.Text = string.Empty;
MsgText.Text = "入库失败";
txtInBarCode.Focus();
}
}
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;
}
private void rawSourceBarCodeClear_Click(object sender, RoutedEventArgs e)
{
this.rawSourceBarCode.Text = string.Empty;
}
private void removeSourceBarCodeClear_Click(object sender, RoutedEventArgs e)
{
this.removeSourceBarCode.Text = string.Empty;
}
///
/// 入库扫描
///
///
///
private void ReturnRawBaseLocaltion_Click(object sender, RoutedEventArgs e)
{
try
{
if (!string.IsNullOrEmpty(txtReturnBox.Text) && !string.IsNullOrEmpty(txtReturnBarCode.Text))
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
BaseEquip baseEquip = SystemData.BaseEquip.First(t => t.objid == 10);
WcsTask? task = dbContext.WcsTask.Where(t => t.nextPointId == baseEquip.objid).FirstOrDefault();
if (task == null)
{
txtReturnMsg.Text = ("未查询到退库任务!");
return;
}
var material = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == txtReturnBarCode.Text);
if (material == null)
{
txtReturnMsg.Text = ("未查询到该条码内容!");
txtReturnBarCode.Text = string.Empty;
txtReturnBarCode.Focus();
return;
}
WmsRawReturn? wmsRawReturn = dbContext.WmsRawReturn.Where(t => t.endStationCode == task.currPointNo && t.executeStatus !="2").FirstOrDefault();
//if (wmsRawReturn == null)
//{
// var result = MessageBox.Show("当前物料不在退出申请单中,确定还要入库吗?", "确认入库", MessageBoxButton.YesNo, MessageBoxImage.Question);
// if (result != MessageBoxResult.Yes)
// {
// txtReturnBarCode.Text = string.Empty;
// txtReturnBox.Text = string.Empty;
// return;
// }
//}
var container = dbContext.WmsBaseLocation.FirstOrDefault(t => t.containerCode == txtReturnBox.Text && t.warehouseId == 512);
List wmsRawStocks = dbContext.WmsRawStock
.Where(t => txtReturnBarCode.Text == t.instockBatch)
.Where(t => t.warehouseFloor == 5 && t.warehouseId == 512).ToList();
if (wmsRawStocks.Count > 0 && material.batchFlag != "1")
{
txtReturnMsg.Text = ($"该条码已入库,非批次!料箱号为{wmsRawStocks.First().palletInfoCode},库位号为{wmsRawStocks.First().locationCode}");
txtReturnBarCode.Text = string.Empty;
txtReturnBox.Text = string.Empty;
return;
}
if (container == null)
{
txtReturnMsg.Text = ("未查询到该容器!");
txtReturnBox.Text = string.Empty;
return;
}
decimal amount = 0;
try
{
amount = decimal.Parse(txtReturnScan.Text);
}
catch
{
txtReturnMsg.Text = ("请输入正确的数量");
return;
}
if (wmsRawReturn != null)
{
//wmsRawReturn.updateDate = DateTime.Now;
//wmsRawReturn.returnAmount += amount;
//if (wmsRawReturn.returnAmount >= wmsRawReturn.planAmount)
//{
// wmsRawReturn.executeStatus = "2";
// wmsRawReturn.endTime = DateTime.Now;
//}
//dbContext.WmsRawReturn.Update(wmsRawReturn);
WmsRawReturnDetail? wmsRawReturnDetail = new WmsRawReturnDetail();
wmsRawReturnDetail.RawReturnId = (long)wmsRawReturn.rawReturnId;
wmsRawReturnDetail.LocationCode = container.locationCode;
wmsRawReturnDetail.MaterialBarcode = txtReturnBarCode.Text;
wmsRawReturnDetail.MaterialId = (long)material.materialId;
wmsRawReturnDetail.InstockBatch = material.batchCode;
wmsRawReturnDetail.MaterialProductionDate = material.productionDate;
wmsRawReturnDetail.PlanAmount = amount;
wmsRawReturnDetail.ReturnAmount = amount;
wmsRawReturnDetail.ExecuteStatus = "2";
wmsRawReturnDetail.ReturnPerson = "WPF";
wmsRawReturnDetail.ReturnTime = DateTime.Now;
wmsRawReturnDetail.ReturnWay = "2";
wmsRawReturnDetail.CreateBy = "WPF";
wmsRawReturnDetail.CreateDate = DateTime.Now;
dbContext.WmsRawReturnDetail.Add(wmsRawReturnDetail);
}
decimal? message = 0;
if (wmsRawStocks.Count > 0)
{ // 批次条码并且有库存
var newRawStock = wmsRawStocks.First();
newRawStock.totalAmount += amount;
newRawStock.updateDate = DateTime.Now;
dbContext.WmsRawStock.Update(newRawStock);
message = newRawStock.totalAmount;
}
else
{ // 无库存
var newRawStock = new WmsRawStock()
{
materialId = material.materialId,
supplierId = material.manufacturerId,
instockBatch = txtInBarCode.Text,
locationCode = container.locationCode,
stockType = "1",
palletInfoCode = container.containerCode,
totalAmount = material.batchFlag == "1" ? amount : 1,
activeFlag = "1",
occupyAmount = 0,
completeFlag = "1",
frozenAmount = 0,
instockDate = System.DateTime.Now,
rawStockId = Global.SnowId.NextId(),
// 退库当成无销售订单
saleOrderId = 0,
warehouseFloor = 5,
warehouseId = 512,
createBy = "扫描退库",
createDate = System.DateTime.Now,
// 当成安全库存
safeFlag = "1",
};
dbContext.WmsRawStock.Add(newRawStock);
message = newRawStock.totalAmount;
}
dbContext.SaveChanges();
txtReturnMsg.Text = ($"退库成功!,当前库存{message}");
txtReturnBarCode.Text = string.Empty;
txtReturnBox.Text = string.Empty;
returnMaterialName.Text = string.Empty;
returnGG.Text = string.Empty;
txtReturnScan.Text = string.Empty;
txtReturnBox.Focus();
}
else
{
txtReturnMsg.Text = ("请先扫描容器号和条码!");
}
}
catch (Exception ex)
{
LogManager.Error(ex);
txtReturnMsg.Text = ("入库失败");
}
}
///
/// 入库容器改变
///
///
///
private void txtInBox_TextChanged(object sender, RoutedEventArgs e)
{
try
{
string containerCode = txtInBox.Text;
if (containerCode.Length >= 1)
{
MsgText.Text = string.Empty;
txtInStoreRemark.Text = string.Empty;
}
if (containerCode.Length < 15)
return;
if (!string.IsNullOrEmpty(containerCode))
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
var container = dbContext.WmsBaseLocation.FirstOrDefault(t => t.containerCode == containerCode && t.warehouseId == 512);
if (container == null)
{
MsgText.Text = $"未查询到该容器{txtInBox.Text}!";
txtInBox.Text = string.Empty;
txtInBox.Focus();
}
else
{
txtInBarCode.Focus();
}
}
}
catch
{
}
}
///
/// 入库条码改变
///
///
///
private void txtInBarCode_TextChanged(object sender, RoutedEventArgs e)
{
try
{
materialName.Text = string.Empty;
materialSpec.Text = string.Empty;
string barCode = txtInBarCode.Text;
if (barCode.Length < 19) return;
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
if (!string.IsNullOrEmpty(barCode))
{
var material = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == barCode);
if (material == null)
{
MsgText.Text = "未查询到该条码内容!";
txtInBarCode.Text = string.Empty;
txtInScan.Text = string.Empty;
txtInBarCode.Focus();
}
else
{
var mesBaseMaterialInfo = dbContext.MesBaseMaterialInfo.FirstOrDefault(t => t.MaterialId == material.materialId);
if (mesBaseMaterialInfo == null)
{
MsgText.Text = "未查询到该条码绑定的物料信息!";
txtInBarCode.Text = string.Empty;
txtInScan.Text = string.Empty;
txtInBarCode.Focus();
}
else
{
txtInScan.Text = (material.batchFlag == "1") ? "" : "1.00";
materialName.Text = mesBaseMaterialInfo.MaterialName;
materialSpec.Text = mesBaseMaterialInfo.MaterialSpec;
if (mesBaseMaterialInfo.BatchFlag == "0")
{
txtInScan.IsReadOnly = true;
}
else
{
txtInScan.IsReadOnly = false;
}
txtInScan.Focus();
}
}
}
}
catch
{
}
}
///
/// 出库容器改变
///
///
///
private void txtReturnBox_TextChanged(object sender, RoutedEventArgs e)
{
try
{
string containerCode = txtReturnBox.Text;
if (!string.IsNullOrEmpty(containerCode))
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
var container = dbContext.WmsBaseLocation.FirstOrDefault(t => t.containerCode == containerCode && t.warehouseId == 512);
if (container == null)
{
MsgText.Text = $"未查询到该容器{txtReturnBox.Text}!";
txtReturnBox.Text = string.Empty;
txtReturnBox.Focus();
}
else
{
txtReturnBarCode.Focus();
}
}
}
catch
{
}
}
///
/// 出库条码改变
///
///
///
private void txtReturnBarCode_TextChanged(object sender, RoutedEventArgs e)
{
try
{
string barCode = txtReturnBarCode.Text;
if (barCode.Length < 19) return;
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
if (!string.IsNullOrEmpty(barCode))
{
var material = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == barCode);
if (material == null)
{
txtReturnBarCode.Text = string.Empty;
txtReturnScan.Text = string.Empty;
txtReturnBarCode.Focus();
}
else
{
var mesBaseMaterialInfo = dbContext.MesBaseMaterialInfo.FirstOrDefault(t => t.MaterialId == material.materialId);
if (mesBaseMaterialInfo == null)
{
txtReturnBarCode.Text = string.Empty;
txtReturnScan.Text = string.Empty;
txtReturnMsg.Text = "未查询到该条码绑定的物料信息!";
txtReturnBarCode.Focus();
}
else
{
txtReturnScan.Text = (material.batchFlag == "1") ? "" : "1.00";
this.returnGG.Text = mesBaseMaterialInfo.MaterialSpec;
this.returnMaterialName.Text = mesBaseMaterialInfo.MaterialName;
this.txtReturnScan.Focus();
if (mesBaseMaterialInfo.BatchFlag == "0")
{
txtReturnScan.IsReadOnly = true;
}
else
{
txtReturnScan.IsReadOnly = false;
}
}
}
}
}
catch
{
}
}
///
/// 出库容器改变
///
///
///
private void txtOutBox_TextChanged(object sender, RoutedEventArgs e)
{
try
{
string containerCode = txtOutBox.Text;
if (containerCode.Length >= 1 && containerCode.Length < 15)
{
scanOutMsg.Text = "";
return;
}
if (!string.IsNullOrEmpty(containerCode))
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
var container = dbContext.WmsBaseLocation.FirstOrDefault(t => t.containerCode == containerCode && t.warehouseId == 512);
if (container == null)
{
scanOutMsg.Text = $"未查询到该容器{txtOutBox.Text}!";
txtOutBox.Text = string.Empty;
txtOutBox.Focus();
}
else
{
txtOutBarCode.Focus();
}
}
}
catch
{
}
}
///
/// 出库条码改变
///
///
///
private void txtOutBarCode_TextChanged(object sender, RoutedEventArgs e)
{
try
{
txtTotalAmount.Text = "";
outMaterialNameTxt.Text = "";
outMaterialSpecTxt.Text = "";
txtOutScan.Text = "";
string barCode = txtOutBarCode.Text;
string containerCode = txtOutBox.Text;
if (barCode.Length < 19) return;
if (!string.IsNullOrEmpty(containerCode))
{
if (!string.IsNullOrEmpty(barCode))
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
var wmsRawStock = dbContext.WmsRawStock.FirstOrDefault(t => t.instockBatch == barCode && t.palletInfoCode == containerCode);
if (wmsRawStock == null)
{
scanOutMsg.Text = "未在该容器中查询到该条码!";
txtOutBarCode.Text = string.Empty;
txtOutScan.Text = string.Empty;
txtOutBarCode.Focus();
}
else
{
var mesBaseMaterialInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == wmsRawStock.instockBatch);
if (mesBaseMaterialInfo == null)
{
scanOutMsg.Text = "未查询到该条码绑定的物料信息!";
txtOutBarCode.Text = string.Empty;
txtOutScan.Text = string.Empty;
txtOutBarCode.Focus();
}
else
{
var materialInfo = dbContext.MesBaseMaterialInfo.FirstOrDefault(t => t.MaterialId == wmsRawStock.materialId);
if (materialInfo != null)
{
outMaterialNameTxt.Text = materialInfo.MaterialName;
outMaterialSpecTxt.Text = materialInfo.MaterialSpec;
}
txtTotalAmount.Text = string.Format("{0:0.00}", wmsRawStock.totalAmount - wmsRawStock.frozenAmount);
txtOutScan.Focus();
//txtOutScan.Text = string.Format("{0:0}", (mesBaseMaterialInfo.batchFlag == "1" ? (wmsRawStock.totalAmount - wmsRawStock.frozenAmount) : 1)) ;
//if (mesBaseMaterialInfo.batchFlag == "1")
//{
// txtOutScan.IsReadOnly = false;
//}
//else
//{
// txtOutScan.IsReadOnly = true;
//}
}
}
}
}
else
{
if (!string.IsNullOrEmpty(barCode))
{
scanOutMsg.Text = "请先扫描容器号!";
txtOutBarCode.Text = string.Empty;
txtOutScan.Text = string.Empty;
}
}
}
catch
{
}
}
///
/// 出库扫描
///
///
///
private void OutRawBaseLocaltion_Click(object sender, RoutedEventArgs e)
{
OutRaw();
}
private void OutRaw()
{
try
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
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;
}
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 10);
if (!string.IsNullOrEmpty(txtOutBox.Text) && !string.IsNullOrEmpty(txtOutBarCode.Text))
{
var mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == txtOutBarCode.Text);
if (mesBaseBarcodeInfo != null)
{
var wmsRawOutstocks = new List();
List list = new List();
try
{
list = JsonConvert.DeserializeObject>(baseEquip.endStationCode);
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();
}
catch
{
}
if (wmsRawOutstocks.Count > 0)
{
wmsRawOutstocks = wmsRawOutstocks.OrderBy(t => list[0] == t.endStationCode ? 0 : 99).ToList();
decimal? sum = wmsRawOutstocks.Sum(t => (t.outstockAmount - t.realOutstockAmount));
if (outScan > sum)
{
scanOutMsg.Text = "出库数量不能大于当前出库的订单的数量";
return;
}
foreach (var item in wmsRawOutstocks)
{
if (outScan <= 0)
{
break;
}
decimal outAmount = 0;
if (item.outstockAmount - item.realOutstockAmount > outScan)
{
item.realOutstockAmount += outScan;
outAmount += outScan;
outScan = 0;
}
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)
//{
// dbContext.Remove(wmsRawStock);
//}
//else
//{
// dbContext.Update(wmsRawStock);
//}
wmsRawStock.totalAmount -= outAmount;
if (wmsRawStock.totalAmount == 0)
{
dbContext.WmsRawStock.Remove(wmsRawStock);
}
else
{
dbContext.WmsRawStock.Update(wmsRawStock);
}
WmsRawOutstockDetail wmsProductOutstockDetail = new WmsRawOutstockDetail()
{
rawOutstockDetailId = Global.SnowId.NextId(),
rawOutstockId = item.rawOutstockId,
materialId = mesBaseBarcodeInfo.materialId,
createDate = DateTime.Now,
createBy = "WCS",
executeStatus = "2",
locationCode = wmsRawStock.locationCode,
outstockAmount = outScan,
planAmount = item.outstockAmount,
warehouseId = 512,
materialBarcode = mesBaseBarcodeInfo.barcodeInfo,
instockBatch = mesBaseBarcodeInfo.batchCode,
stackAmount = mesBaseBarcodeInfo.batchFlag == "1" ? mesBaseBarcodeInfo.amount : 1,
outstockPerson = "WCS",
outstockTime = DateTime.Now,
outstockWay = "2",
materialProductionDate = mesBaseBarcodeInfo.productionDate,
Tips = this.remarks.Text
};
dbContext.Add(wmsProductOutstockDetail);
dbContext.Update(item);
dbContext.SaveChanges();
}
}
else
{
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 = wmsRawStock.locationCode;
newWmsRawOutstock.stationId = 512;
newWmsRawOutstock.materialId = mesBaseBarcodeInfo.materialId;
newWmsRawOutstock.materialBatch = mesBaseBarcodeInfo.barcodeInfo;
newWmsRawOutstock.palletInfoCode = wmsRawStock.palletInfoCode;
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;
remarks.Text = string.Empty;
txtOutBox.Focus();
}
}
else
{
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>(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)
{
scanOutMsg.Text = "出库失败" + ex;
}
}
///
/// 搜索
///
///
///
private void SelectButton_Click(object sender, RoutedEventArgs e)
{
this.PageControl2.PageInfo.CurrentPage = 1;
CallSelectedItem.Clear();
GetPersonCallMaterialData();
}
///
/// 获取人员呼叫的物料数据
///
private void GetPersonCallMaterialData()
{
try
{
int pageNumber = this.PageControl2.PageInfo.CurrentPage;
// 计算跳过的记录数
int skip = (pageNumber - 1) * pageCount;
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
List materialIds = new List();
List materialInfos = new List();
if (!string.IsNullOrEmpty(MaterialName.Text))
{
materialInfos = dbContext.MesBaseMaterialInfo.Where(t => t.MaterialName.Contains(MaterialName.Text) || t.MaterialCode.Contains(MaterialName.Text) || t.MaterialSpec.Contains(MaterialName.Text)).ToList();
materialIds = materialInfos.Select(t => t.MaterialId).ToList();
}
List wmsRawStocks = null;
wmsRawStocks = dbContext.WmsRawStock
.Where(t => t.warehouseId == 512)
.WhereIf(materialIds.Count > 0, t => materialIds.Contains(t.materialId))
.ToList();
var groupWmsRawStock = wmsRawStocks.GroupBy(t => new { t.materialId, t.palletInfoCode }).Select(t =>
new
{
materialId = t.Key.materialId,
palletInfoCode = t.Key.palletInfoCode,
totalAmount = t.Sum(x => x.totalAmount),
frozenAmount = t.Sum(x => x.frozenAmount),
});
int totalRecords = groupWmsRawStock.Count();
this.PageControl2.PageInfo.TotalPage = (totalRecords / pageCount) + (totalRecords % pageCount == 0 ? 0 : 1);
groupWmsRawStock = groupWmsRawStock.Skip(skip).Take(pageCount);
//.GroupBy(t => t.palletInfoCode)
//.Select(t => new
//{
// palletInfoCode = t.Key,
// totalAmount = string.Join("\n", t.Select(x => x.totalAmount)),
// frozenAmount = string.Join("\n", t.Select(x => x.frozenAmount)),
// materialId = string.Join("\n", t.Select(x => x.materialId)),
//}).ToList();
var palletInfoCodes = groupWmsRawStock.Select(t => t.palletInfoCode).Distinct().ToList();
var wmsBaseLocations = dbContext.WmsBaseLocation
.Where(t => t.ContainerStatus == "1")
.Where(t => t.warehouseId == 512)
.Where(t => palletInfoCodes.Contains(t.containerCode)).ToList();
if (string.IsNullOrEmpty(MaterialName.Text))
{
var tempMaterialIds = groupWmsRawStock.Select(x => x.materialId).Distinct().ToList();
materialInfos = dbContext.MesBaseMaterialInfo.Where(x => tempMaterialIds.Contains(x.MaterialId)).ToList();
}
var bill = from a in wmsBaseLocations
from b in groupWmsRawStock
from c in materialInfos
where a.containerCode == b.palletInfoCode && b.materialId == c.MaterialId
select new
{
baseLocationId = a.locationId,
//wmsRawStocksId = b.rawStockId,
locationCode = a.locationCode,
materialId = b.materialId,
materialCode = c.MaterialCode,
materialName = c.MaterialName,
materialSpec = c.MaterialSpec,
palletInfoCode = b.palletInfoCode,
//instockDate = b.instockDate,
totalAmount = Math.Round((decimal)b.totalAmount, 2),
frozenAmount = Math.Round((decimal)b.frozenAmount, 2),
IsSelected = CallSelectedItem.Contains(a.locationId)
};
var bills = bill.GroupBy(t => new { t.baseLocationId, t.palletInfoCode, t.locationCode, t.IsSelected })
.Select(t => new
{
baseLocationId = t.Key.baseLocationId,
palletInfoCode = t.Key.palletInfoCode,
locationCode = t.Key.locationCode,
IsSelected = t.Key.IsSelected,
totalAmount = string.Join("\n", t.Select(x => x.totalAmount)),
frozenAmount = string.Join("\n", t.Select(x => x.frozenAmount)),
materialId = string.Join("\n", t.Select(x => x.materialId)),
materialCode = string.Join("\n", t.Select(x => x.materialCode)),
materialName = string.Join("\n", t.Select(x => x.materialName[..(x.materialName.Length > 20 ? 20 : x.materialName.Length)])),
materialNameSrc = string.Join("\n", t.Select(x => x.materialName)),
materialSpec = string.Join("\n", t.Select(x => x.materialSpec[..(x.materialSpec.Length > 20 ? 20 : x.materialSpec.Length)])),
materialSpecSrc = string.Join("\n", t.Select(x => x.materialSpec))
}).ToList();
bills = bills.OrderBy(t => t.palletInfoCode).ThenBy(t => t.materialId).ToList();
// PersonCallMaterial.ItemsSource = bills.Skip((this.Pagination2.PageIndex - 1) * this.pageCount).Take(this.pageCount);
PersonCallMaterial.ItemsSource = bills;
int sum = bills.Count();
// Pagination2.MaxPageCount = (sum / pageCount) + (sum % pageCount == 0 ? 0 : 1);
if (bills.Count == 0)
{
HandyControl.Controls.MessageBox.Show("未查询到数据");
}
}
catch
{
}
}
///
/// 页码改变时
///
///
///
private async void Pagination2_PageUpdated(object sender, HandyControl.Data.FunctionEventArgs e)
{
GetPersonCallMaterialData();
}
///
/// 页码改变时
///
///
///
private void Pagination3_PageUpdated(object sender, HandyControl.Data.FunctionEventArgs e)
{
GetInvertoryData();
}
///
/// 开始盘点
///
///
///
private void StartInventory(object sender, RoutedEventArgs e)
{
dynamic wmsInventoryCheck = this.InventoryMaterial.SelectedItem;
long inventoryCheckId = wmsInventoryCheck.InventoryCheckId;
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
var InventoryCheck = dbContext.WmsInventoryCheck
.Where(t => t.InventoryCheckId == inventoryCheckId).FirstOrDefault();
if (InventoryCheck == null || InventoryCheck.CheckStatus == "2")
{
MessageBox.Show("盘点单不存在或已盘点");
return;
}
BaseEquip agvEquip = SystemData.BaseEquip.First(t => t.objid == 11);
BaseEquip lineEquip = SystemData.BaseEquip.First(t => t.objid == 20);
if (InventoryCheck.InventoryingAmount != 0)
{
bool hasTask = dbContext.WcsTask.Where(t => t.taskType == 100).Any();
if (!hasTask)
{
hasTask = dbContext.WcsTaskManual.Where(t => t.taskType == 100).Any();
if (!hasTask)
{
InventoryCheck.InventoriedAmount += InventoryCheck.InventoryingAmount;
InventoryCheck.InventoryingAmount = 0;
}
}
}
if (InventoryCheck.InventoryingAmount == 0)
{
bool hasTask = dbContext.WcsTask.Where(t => t.taskType == 100).Any();
if (!hasTask)
{
hasTask = dbContext.WcsTaskManual.Where(t => t.taskType == 100).Any();
if (!hasTask)
{
List? locationCodeList = null;
if (!string.IsNullOrEmpty(InventoryCheck.MaterialId))
{
List materialIds = InventoryCheck.MaterialId.Split(';').Select(id => long.Parse(id)).ToList();
if (materialIds != null && materialIds.Count > 0)
{
// 盘点指定型号的物料库存的库位
locationCodeList = dbContext.WmsRawStock.Where(t => t.warehouseId == 512 && materialIds.Contains((long)t.materialId)).Select(x => x.locationCode).Distinct().ToList();
}
}
//所有满足条件的需要盘库的库位
var wmsBaseLocations = dbContext.WmsBaseLocation
.Where(t => t.ContainerStatus == "1" && t.warehouseId == 512)
.Where(t => t.locationStatus == "1")
.OrderBy(t => t.locRow)
.ThenBy(t => t.locColumn)
.ToList();
if (locationCodeList != null && locationCodeList.Count > 0)
{
wmsBaseLocations = wmsBaseLocations.Where(x => locationCodeList.Contains(x.locationCode)).ToList();
}
var wmsInventoryCheckDetails = dbContext.WmsInventoryCheckDetail
.Where(t => t.InventoryCheckId == InventoryCheck.InventoryCheckId).ToList();
// 已经盘点过的库位
List locationCodes = wmsInventoryCheckDetails.Select(t => t.LocationCode).Distinct().ToList();
wmsBaseLocations.RemoveAll(t => locationCodes.Contains(t.locationCode));
if (wmsBaseLocations.Count > 0)
{
List locations = wmsBaseLocations.Select(t => t.locationCode).ToList();
List wmsRawStocks = dbContext.WmsRawStock.Where(t => t.warehouseId == 512)
.Where(t => locations.Contains(t.locationCode)).ToList();
// 过滤后需要满足条件的有库存的库位
List codes = wmsRawStocks.Select(t => t.locationCode).Distinct().ToList();
var bill = from a in wmsBaseLocations
from b in codes
where a.locationCode == b
select new { a };
var outLocation = bill.OrderBy(t => t.a.locRow).ThenBy(t => t.a.locColumn).Take(6);
List addList = new List();
foreach (var item in outLocation)
{
WmsBaseLocation startBaseLocation = item.a;
startBaseLocation.locationStatus = "6";
//startBaseLocation.ContainerStatus = "2";
addList.Add(new WcsTaskManual()
{
objid = Global.SnowId.NextId(),
taskType = 100,
containerNo = startBaseLocation.containerCode,
currPointId = startBaseLocation.locationId,
currPointNo = startBaseLocation.locationCode,
nextPointId = agvEquip.objid,
nextPointNo = agvEquip.equipNo,
endPointId = lineEquip.objid,
endPointNo = lineEquip.equipNo,
createTime = DateTime.Now,
ud1 = startBaseLocation.locColumn,
taskStatus = 0,
remark = "CTU盘点任务",
floorNo = 5,
fromFloorNo = 5,
useFlag = 1
});
dbContext.Update(startBaseLocation);
}
//for (int i = addList.Count + 1; i <= 6; i++)
//{
// List list = addList.Select(t => t.currPointId).ToList();
// WmsBaseLocation? startBaseLocation = wmsBaseLocations.Where(t => !list.Contains(t.locationId)).FirstOrDefault();
// if (startBaseLocation != null)
// {
// startBaseLocation.locationStatus = "6";
// startBaseLocation.ContainerStatus = "2";
// addList.Add(new WcsTaskManual()
// {
// objid = Global.SnowId.NextId(),
// taskType = 100,
// orderId = InventoryCheck.InventoryCheckId,
// containerNo = startBaseLocation.containerCode,
// currPointId = startBaseLocation.locationId,
// currPointNo = startBaseLocation.locationCode,
// nextPointId = agvEquip.objid,
// nextPointNo = agvEquip.equipNo,
// endPointId = lineEquip.objid,
// endPointNo = lineEquip.equipNo,
// createTime = DateTime.Now,
// ud1 = startBaseLocation.locColumn,
// taskStatus = 0,
// remark = "CTU盘点任务",
// floorNo = 5,
// fromFloorNo = 5,
// useFlag = 1,
// });
// dbContext.Update(startBaseLocation);
// }
//}
List addCheckDetail = new List();
foreach (var item in addList)
{
List itemList = wmsRawStocks.Where(t => t.locationCode == item.currPointNo).ToList();
foreach (var rawItem in itemList)
{
addCheckDetail.Add(new WmsInventoryCheckDetail
{
InventoryCheckDetailId = Global.SnowId.NextId(),
InventoryCheckId = inventoryCheckId,
CheckStatus = "1",
CreateBy = "WCS",
CreateTime = DateTime.Now,
StockAmount = rawItem.totalAmount,
RealAmount = rawItem.totalAmount,
InventoryCount = 0,
LocationCode = rawItem.locationCode,
MaterialBatch = rawItem.instockBatch,
StockId = 1,
StockType = "1",
MaterialId = rawItem.materialId,
ErpStatus = "0",
ErpAmount = 0,
CheckType = "1"
});
}
}
InventoryCheck.InventoryingAmount += addList.Count;
if (InventoryCheck.BeginTime == null)
{
InventoryCheck.BeginTime = DateTime.Now;
InventoryCheck.CheckStatus = "1";
}
dbContext.AddRange(addCheckDetail);
dbContext.AddRange(addList);
dbContext.SaveChanges();
HandyControl.Controls.MessageBox.Show("任务创建成功!");
}
else
{
HandyControl.Controls.MessageBox.Error("无可盘点库位!");
}
}
else
{
HandyControl.Controls.MessageBox.Info("当前有盘点任务正在出库");
}
}
else
{
HandyControl.Controls.MessageBox.Info("当前有盘点任务正在出库");
}
}
else
{
HandyControl.Controls.MessageBox.Info("盘点中,请等待本次盘点完成!");
}
GetInvertoryData();
}
///
/// 结束盘点
///
///
///
private void EndInventory(object sender, RoutedEventArgs e)
{
try
{
dynamic wmsInventoryCheck = this.InventoryMaterial.SelectedItem;
long inventoryCheckId = wmsInventoryCheck.InventoryCheckId;
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
var InventoryCheck = dbContext.WmsInventoryCheck
.Where(t => t.InventoryCheckId == inventoryCheckId).FirstOrDefault();
if (InventoryCheck.CheckStatus != "2")
{
InventoryCheck.CheckStatus = "2";
InventoryCheck.InventoriedAmount += InventoryCheck.InventoryingAmount;
InventoryCheck.InventoryingAmount = 0;
InventoryCheck.EndTime = DateTime.Now;
}
dbContext.WmsInventoryCheck.Update(InventoryCheck);
dbContext.SaveChanges();
GetInvertoryData();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
///
/// 查看盘点详情界面
///
///
///
private void OpenInventoryDetails(object sender, RoutedEventArgs e)
{
dynamic wmsInventoryCheck = this.InventoryMaterial.SelectedItem;
long inventoryCheckId = wmsInventoryCheck.InventoryCheckId;
InventoryDetails inventoryDetails = new InventoryDetails(_host, inventoryCheckId);
inventoryDetails.ShowDialog();
}
///
/// 叫空料箱
///
///
///
private void CallEmptyBtn_Click(object sender, RoutedEventArgs e)
{
try
{
EmptyCountForm emptyCountForm = new EmptyCountForm(1, 6);
emptyCountForm.ShowDialog();
if (EmptyCountForm.IsSelect)
{
var baseEquip = SystemData.BaseEquip.First(t => t.objid == 11);
BaseEquip endEquip = SystemData.BaseEquip.First(t => t.objid == 20);
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
//int taskCount = dbContext.WcsTask.Where(t => t.taskType == 30).Count();
//if (taskCount >= 6)
//{
// HandyControl.Controls.HandyControl.Controls.MessageBox.Show("当前CTU入库任务已满6个,请等待任务完成后再叫空箱!");
// return;
//}
#region 出库创建taskmanual,如果有之前的出库任务, 弹框提示有未完成的出库任务,是否继续出库,如果继续,删除之前的出库任务
var removeList = dbContext.WcsTask.Where(x => x.taskType == 30 && x.taskStatus == 6).ToList();
if (removeList.Count > 0)
{
StringBuilder stringContainers = new StringBuilder();
stringContainers.AppendLine("以下料箱有未完成的出库任务:");
removeList.ForEach(x => stringContainers.AppendLine($"料箱号{x.containerNo}\n"));
stringContainers.AppendLine("是否删除任务继续出库?");
MessageBoxResult isContinueCreateResult = HandyControl.Controls.MessageBox.Show(stringContainers.ToString(), "提示", MessageBoxButton.YesNo);
if (isContinueCreateResult == MessageBoxResult.Yes)
{
dbContext.RemoveRange(removeList);
}
else
{
return;
}
}
#endregion
var wmsBaseLocation = dbContext.WmsBaseLocation
.Where(t => t.locationStatus == "1")
.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 palletInfoCodes = wmsRawStock.Select(t => t.palletInfoCode).ToList();
wmsBaseLocation.RemoveAll(t => palletInfoCodes.Contains(t.containerCode));
if (wmsBaseLocation.Count > 0 && EmptyCountForm.EmptyTaskCount <= wmsBaseLocation.Count)
{
List addList = new List();
for (int i = 0; i < EmptyCountForm.EmptyTaskCount; i++)
{
WmsBaseLocation startBaseLocation = wmsBaseLocation[i];
startBaseLocation.locationStatus = "6";
startBaseLocation.ContainerStatus = "2";
addList.Add(new WcsTaskManual()
{
objid = Global.SnowId.NextId(),
taskType = 30,
containerNo = startBaseLocation.containerCode,
startPointId = startBaseLocation.locationId,
startPointNo = startBaseLocation.locationCode,
currPointId = startBaseLocation.locationId,
currPointNo = startBaseLocation.locationCode,
nextPointId = baseEquip.objid,
nextPointNo = baseEquip.equipNo,
endPointId = endEquip.objid,
endPointNo = endEquip.equipNo,
createTime = DateTime.Now,
ud1 = startBaseLocation.locColumn,
taskStatus = 0,
remark = "CTU空库任务",
floorNo = 5,
fromFloorNo = 5,
useFlag = 1
});
dbContext.Update(startBaseLocation);
}
dbContext.AddRange(addList);
dbContext.SaveChanges();
HandyControl.Controls.MessageBox.Show("任务创建成功!");
}
else
{
HandyControl.Controls.MessageBox.Error($"没有足够的空箱库位库位,剩余空库位数量为{wmsBaseLocation.Count}!");
}
}
}
catch
{
}
}
///
/// 叫托盘
///
///
///
private void CallTrayBtn_Click(object sender, RoutedEventArgs e)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
using var transaction = dbContext.Database.BeginTransaction();
try
{
BaseEquip ctuEquip = SystemData.BaseEquip.First(t => t.objid == 11);
BaseEquip endEquip = SystemData.BaseEquip.First(t => t.objid == 20);
if (itemsControlItems.Count == 0)
{
HandyControl.Controls.MessageBox.Show("请选择料箱!");
return;
}
//int taskCount = dbContext.WcsTask.Where(t => t.nextPointId == 11).Count();
//if (taskCount + ids.Count > 6)
//{
// 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();
List idList = itemsControlItems.Select(x => x.baseLocationId).ToList();
var wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.warehouseId == 512 && t.ContainerStatus == "1").Where(t => idList.Contains(t.locationId)).ToList();
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendLine("确认出库:");
foreach (var item in wmsBaseLocation)
{
stringBuilder.AppendLine($"库位号{item.locationCode},料箱号{item.containerCode}.");
}
MessageBoxResult MessageBoxResult = HandyControl.Controls.MessageBox.Show(stringBuilder.ToString(), "提示", MessageBoxButton.YesNo);
if (MessageBoxResult == MessageBoxResult.Yes)
{
#region 出库创建taskmanual,如果有之前的出库任务, 弹框提示有未完成的出库任务,是否继续出库,如果继续,删除之前的出库任务
var removeList = dbContext.WcsTask.Where(x => x.taskType == 30 && x.taskStatus == 6).ToList();
if (removeList.Count > 0)
{
StringBuilder stringContainers = new StringBuilder();
stringContainers.AppendLine("以下料箱有未完成的出库任务:");
removeList.ForEach(x => stringContainers.AppendLine($"料箱号{x.containerNo}\n"));
stringContainers.AppendLine("是否删除任务继续出库?");
MessageBoxResult isContinueCreateResult = HandyControl.Controls.MessageBox.Show(stringContainers.ToString(), "提示", MessageBoxButton.YesNo);
if (isContinueCreateResult == MessageBoxResult.Yes)
{
dbContext.RemoveRange(removeList);
}
else
{
return;
}
}
var removeTaskManualList = dbContext.WcsTaskManual.Where(x => x.taskType == 30 ).ToList();
if (removeTaskManualList.Count > 0)
{
StringBuilder stringContainers = new StringBuilder();
stringContainers.AppendLine("以下料箱有未完成的出库任务:");
removeTaskManualList.ForEach(x => stringContainers.AppendLine($"料箱号{x.containerNo}\n"));
stringContainers.AppendLine("是否删除任务继续出库?");
MessageBoxResult isContinueCreateResult = HandyControl.Controls.MessageBox.Show(stringContainers.ToString(), "提示", MessageBoxButton.YesNo);
if (isContinueCreateResult == MessageBoxResult.Yes)
{
dbContext.RemoveRange(removeTaskManualList);
}
else
{
return;
}
}
#endregion
List addList = new List();
foreach (var item in wmsBaseLocation)
{
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
});
// item.ContainerStatus = "2";
//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 emptyLocations = (from t1 in dbContext.WmsBaseLocation
where !dbContext.WmsRawStock.Any(t2 => t2.locationCode == t1.locationCode)
&& t1.locationStatus == "1"
&& t1.ContainerStatus == "1"
&& t1.warehouseId == 512
orderby t1.locColumn, t1.locRow
select new WmsBaseLocation
{
locationId = t1.locationId,
containerCode = t1.containerCode,
locationCode = t1.locationCode
}).ToList();
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)
{
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.WmsBaseLocation.Where(t => t.locationId == item.locationId)
.Update(t => new WmsBaseLocation { locationStatus = "6", ContainerStatus = "2" });
}
}
}
else
{
for (int i = 0; i < EmptyCountForm.EmptyTaskCount; i++)
{
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.WmsBaseLocation.Where(t => t.locationId == emptyLocations[i].locationId)
.Update(t => new WmsBaseLocation { locationStatus = "6", ContainerStatus = "2" });
}
}
}
}
}
dbContext.AddRange(addList);
dbContext.SaveChanges();
transaction.Commit();
// HandyControl.Controls.MessageBox.Show("创建出库任务成功!");
itemsControlItems.Clear();
CallSelectedItem.Clear();
GetPersonCallMaterialData();
}
}
catch
{
try
{
transaction.Rollback();
}
catch
{
}
}
}
///
/// 叫托盘
///
///
///
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 taskList = new List();
if (itemsControlItems.Count == 0)
{
HandyControl.Controls.MessageBox.Show("请选择料箱!");
return;
}
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
List idList = itemsControlItems.Select(x => x.baseLocationId).ToList();
if (idList.Count == 0)
{
HandyControl.Controls.MessageBox.Error("请选择需要移库的料箱!");
return;
}
else
{
if (idList.Count == 1)
{
List emptyLocations = dbContext.ExecuteSqlQuery(@$"
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)
{
var emptyLocation = dbContext.WmsBaseLocation.FirstOrDefault(t => t.locationId == emptyLocations.First().locationId);
//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 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;
}
}
}
catch
{
}
}
///
/// 执行CTU任务
///
///
///
private void ExecuteCtuTask_Click(object sender, RoutedEventArgs e)
{
try
{
if (int.TryParse(outTaskCount.Text, out int count))
{
if (count > 0)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
var tasks = dbContext.WcsTask.Where(t => t.taskType == 30 && t.taskStatus == 0 && t.useFlag == 0).ToList();
foreach (var task in tasks)
{
task.taskStatus = 0;
task.useFlag = 1;
dbContext.Update(task);
dbContext.SaveChanges();
}
HandyControl.Controls.MessageBox.Show("任务执行成功!");
}
else
{
HandyControl.Controls.MessageBox.Error("没有可执行的任务!");
}
}
}
catch
{
}
}
private void callPlc_Click(object sender, RoutedEventArgs e)
{
try
{
BasePlcpoint basePlcpoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "canReceive");
SystemData.PlcDic[1].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
MsgText.Text = "一键收料发送成功";
HandyControl.Controls.MessageBox.Show("一键收料发送成功!");
// 修改所有盘库明细任务状态
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
List list = dbContext.WmsInventoryCheckDetail.Where(t => t.CheckStatus == "1").ToList();
if (list != null)
{
list.ForEach(t => t.CheckStatus = "2");
dbContext.UpdateRange(list);
}
WmsInventoryCheck wmsInventoryCheck = dbContext.WmsInventoryCheck.FirstOrDefault(t => t.CheckStatus == "1");
if (wmsInventoryCheck != null)
{
wmsInventoryCheck.InventoriedAmount = dbContext.WmsInventoryCheckDetail.Where(t => t.InventoryCheckId == wmsInventoryCheck.InventoryCheckId).Select(t => t.LocationCode).Distinct().Count();
wmsInventoryCheck.InventoryingAmount = 0;
dbContext.SaveChanges();
}
GetInvertoryData();
}
catch (Exception ex)
{
try
{
if (ex is PlcException)
{
foreach (var item in SystemData.PlcDic)
{
if (item.Value.IP == ex.Message)
{
MsgText.Text = "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();
});
break;
}
}
}
}
catch
{
MsgText.Text = "PLC连接失败!";
}
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
TextBoxGetFocus();
}
#region 清除按钮
private void barClear_Click(object sender, RoutedEventArgs e)
{
txtInBarCode.Text = string.Empty;
}
private void boxOutClear_Click(object sender, RoutedEventArgs e)
{
txtOutBox.Text = string.Empty;
}
private void boxClear_Click(object sender, RoutedEventArgs e)
{
txtInBox.Text = string.Empty;
}
private void barOutClear_Click(object sender, RoutedEventArgs e)
{
txtOutBarCode.Text = string.Empty;
}
private void boxReturnClear_Click(object sender, RoutedEventArgs e)
{
txtReturnBox.Text = string.Empty;
}
private void barReturnClear_Click(object sender, RoutedEventArgs e)
{
txtReturnBarCode.Text = string.Empty;
}
#endregion
#region 托盘库进出
private void OneIn_Click(object sender, RoutedEventArgs e)
{
try
{
BasePlcpoint trayStatus = SystemData.BasePlcpoints.First(t => t.plcpointNo == "trayStatus");
var trayStatusValue = SystemData.PlcDic[0].Read(trayStatus.plcpointAddress);
if (trayStatusValue == null || Convert.ToInt32(trayStatusValue) == 0)
{
HandyControl.Controls.MessageBox.Error("托盘库开启自动状态!");
return;
}
BasePlcpoint lineSignal = SystemData.BasePlcpoints.First(t => t.plcpointNo == "linesignal01");
var lineSignalValue = SystemData.PlcDic[0].Read(lineSignal.plcpointAddress);
if (lineSignalValue != null && Convert.ToInt32(lineSignalValue) == 1)
{
if (!ReadEmptyLocation())
{
HandyControl.Controls.MessageBox.Show("有任务正在执行");
return;
}
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 40);
BasePlcpoint basePlcpoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "oneIn");
SystemData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
baseEquip.emptyCount += 1;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
HandyControl.Controls.MessageBox.Show("下发成功");
}
else
{
HandyControl.Controls.MessageBox.Error("未检测到托盘");
}
}
catch (Exception ex)
{
if (ex is PlcException)
{
foreach (var item in SystemData.PlcDic)
{
if (item.Value.IP == ex.Message)
{
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();
});
}
}
}
LogManager.Error(ex);
}
}
private void OneOut_Click(object sender, RoutedEventArgs e)
{
try
{
BasePlcpoint trayStatus = SystemData.BasePlcpoints.First(t => t.plcpointNo == "trayStatus");
var trayStatusValue = SystemData.PlcDic[0].Read(trayStatus.plcpointAddress);
if (trayStatusValue == null || Convert.ToInt32(trayStatusValue) == 0)
{
HandyControl.Controls.MessageBox.Error("托盘库开启自动状态!");
return;
}
BasePlcpoint lineSignal = SystemData.BasePlcpoints.First(t => t.plcpointNo == "linesignal01");
var lineSignalValue = SystemData.PlcDic[0].Read(lineSignal.plcpointAddress);
if (lineSignalValue != null && Convert.ToInt32(lineSignalValue) == 0)
{
if (!ReadEmptyLocation())
{
HandyControl.Controls.MessageBox.Show("有任务正在执行");
return;
}
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 40);
BasePlcpoint basePlcpoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "oneOut");
SystemData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
baseEquip.emptyCount -= 1;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
HandyControl.Controls.MessageBox.Show("下发成功");
}
else
{
HandyControl.Controls.MessageBox.Show("检测到外侧有托盘,无法出堆垛机");
}
}
catch (Exception ex)
{
if (ex is PlcException)
{
foreach (var item in SystemData.PlcDic)
{
if (item.Value.IP == ex.Message)
{
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();
});
}
}
}
LogManager.Error(ex);
}
}
private void SomeIn_Click(object sender, RoutedEventArgs e)
{
try
{
BasePlcpoint trayStatus = SystemData.BasePlcpoints.First(t => t.plcpointNo == "trayStatus");
var trayStatusValue = SystemData.PlcDic[0].Read(trayStatus.plcpointAddress);
if (trayStatusValue == null || Convert.ToInt32(trayStatusValue) == 0)
{
HandyControl.Controls.MessageBox.Error("托盘库开启自动状态!");
return;
}
//BasePlcpoint lineSignal = SystemData.BasePlcpoints.First(t => t.plcpointNo == "linesignal01");
//var lineSignalValue = SystemData.PlcDic[0].Read(lineSignal.plcpointAddress);
//if (lineSignalValue != null && Convert.ToInt32(lineSignalValue) == 1)
{
EmptyCountForm emptyCount = new EmptyCountForm(1, 10);
emptyCount.ShowDialog();
if (EmptyCountForm.IsSelect)
{
if (!ReadEmptyLocation())
{
HandyControl.Controls.MessageBox.Show("有任务正在执行");
return;
}
int emptyTaskCount = EmptyCountForm.EmptyTaskCount;
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 40);
BasePlcpoint basePlcpoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "someIn");
SystemData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
baseEquip.emptyCount = emptyTaskCount;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
HandyControl.Controls.MessageBox.Show("下发成功");
}
}
//else
//{
// HandyControl.Controls.MessageBox.Show("未检测到托盘");
//}
}
catch (Exception ex)
{
if (ex is PlcException)
{
foreach (var item in SystemData.PlcDic)
{
if (item.Value.IP == ex.Message)
{
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();
});
}
}
}
LogManager.Error(ex);
}
}
private void SomeOut_Click(object sender, RoutedEventArgs e)
{
try
{
BasePlcpoint trayStatus = SystemData.BasePlcpoints.First(t => t.plcpointNo == "trayStatus");
var trayStatusValue = SystemData.PlcDic[0].Read(trayStatus.plcpointAddress);
if (trayStatusValue == null || Convert.ToInt32(trayStatusValue) == 0)
{
HandyControl.Controls.MessageBox.Error("托盘库开启自动状态!");
return;
}
if (!ReadEmptyLocation())
{
HandyControl.Controls.MessageBox.Show("有任务正在执行");
return;
}
BasePlcpoint lineSignal = SystemData.BasePlcpoints.First(t => t.plcpointNo == "linesignal01");
var lineSignalValue = SystemData.PlcDic[0].Read(lineSignal.plcpointAddress);
if (lineSignalValue != null && Convert.ToInt32(lineSignalValue) == 0)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 40);
BasePlcpoint basePlcpoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "someOut");
SystemData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
baseEquip.emptyCount = 0;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
HandyControl.Controls.MessageBox.Show("下发成功");
}
else
{
HandyControl.Controls.MessageBox.Show("检测到外侧有托盘,无法出堆垛机");
}
}
catch (Exception ex)
{
if (ex is PlcException)
{
foreach (var item in SystemData.PlcDic)
{
if (item.Value.IP == ex.Message)
{
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();
});
}
}
}
LogManager.Error(ex);
}
}
#endregion
#region 修改托盘库
private void UpdateEmpty_Click(object sender, RoutedEventArgs e)
{
try
{
//lock (updateLock)
{
EmptyCountForm emptyCountForm = new EmptyCountForm(0, 10);
emptyCountForm.ShowDialog();
if (EmptyCountForm.IsSelect)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 40);
baseEquip.emptyCount = EmptyCountForm.EmptyTaskCount;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
HandyControl.Controls.MessageBox.Show("修改成功");
}
}
}
catch
{
}
}
#endregion
private void WindowHidden_Click(object sender, RoutedEventArgs e)
{
this.WindowState = WindowState.Minimized;
}
private void btnSendTrayToTurnover_Click(object sender, RoutedEventArgs e)
{
try
{
//判断PLC绳子抱夹信号 fcSignal1-2F废料机抱夹信号 fcSignal2-2F废料机钩子信号
BasePlcpoint fcSignal1 = SystemData.BasePlcpoints.First(t => t.plcpointNo == "fcSignal1");
BasePlcpoint fcSignal2 = SystemData.BasePlcpoints.First(t => t.plcpointNo == "fcSignal2");
var fcSignal1Value = SystemData.PlcDic[2].Read(fcSignal1.plcpointAddress);
var fcSigna12Value = SystemData.PlcDic[2].Read(fcSignal2.plcpointAddress);
if (fcSignal1Value != null && fcSigna12Value != null && Convert.ToInt32(fcSignal1Value) == 0 && Convert.ToInt32(fcSigna12Value) == 0)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
var baseEquip = dbContext.BaseEquip.First(t => t.objid == 38);
var agvEquip = SystemData.BaseEquip.First(t => t.objid == 8);
bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == baseEquip.objid || t.currPointId == baseEquip.objid).Any();
bool hasTaskManual = dbContext.WcsTaskManual.Where(t => t.endPointId == baseEquip.objid || t.currPointId == baseEquip.objid).Any();
if (hasTask || hasTaskManual)
{
HandyControl.Controls.MessageBox.Show("有任务正在执行,请等待任务完成后再执行此操作!");
return;
}
else
{
var endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0 && t.useFlag == 1);
if (endEquip == null)
{
HandyControl.Controls.MessageBox.Show("没有空箱库位!");
return;
}
else
{
WcsTaskManual task = new()
{
objid = Global.SnowId.NextId(),
taskType = 56,
containerNo = baseEquip.containerNo,
currPointId = baseEquip.objid,
currPointNo = baseEquip.equipNo,
nextPointId = agvEquip.objid,
nextPointNo = agvEquip.equipNo,
endPointId = endEquip.objid,
endPointNo = endEquip.equipNo,
createTime = DateTime.Now,
taskStatus = 0,
useFlag = 1,
floorNo = 2,
fromFloorNo = 2,
createBy = "WPF",
isEmpty = "0",
};
dbContext.Add(task);
dbContext.SaveChanges();
HandyControl.Controls.MessageBox.Show("任务生成成功!");
}
}
}
else
{
HandyControl.Controls.MessageBox.Show("请先检查废料口袋子抓夹是否没有释放!");
return;
}
}
catch (Exception ex)
{
LogManager.Error(ex);
}
}
private void btnSendEmptyTray_Click(object sender, RoutedEventArgs e)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
var baseEquip = SystemData.BaseEquip.First(t => t.objid == 38);
var agvEquip = SystemData.BaseEquip.First(t => t.objid == 8);
bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == baseEquip.objid || t.currPointId == baseEquip.objid).Any();
bool hasTaskManual = dbContext.WcsTaskManual.Where(t => t.endPointId == baseEquip.objid || t.currPointId == baseEquip.objid).Any();
if (hasTask || hasTaskManual)
{
HandyControl.Controls.MessageBox.Show("有任务正在执行,请等待任务完成后再执行此操作!");
return;
}else if (baseEquip.equipStatus == 1)
{
HandyControl.Controls.MessageBox.Show("废料区有托盘,请先移走!");
return;
}
else
{
var startEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 1 && t.emptyCount == 1 && t.useFlag == 1 && t.ud3=="1");
if (startEquip == null)
{
MessageBox.Show("二楼未找到一个托盘的库位,请前往一楼调取");
return;
//BaseEquip firstEmptyEquip = dbContext.BaseEquip.First(t => t.objid == 40);
//if (firstEmptyEquip.emptyCount > 0)
//{
// MessageBox.Show("二楼未找到一个托盘的库位,请前往一楼调取");
// MessageBoxResult MessageBoxResult = HandyControl.Controls.MessageBox.Show("二楼未找到一个托盘的库位,是否从一楼调取?", "提示", MessageBoxButton.OKCancel);
// if (MessageBoxResult == MessageBoxResult.OK)
// {
// if (ReadEmptyLocation())
// {
// BasePlcpoint oneOutPoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "oneOut");
// SystemData.PlcDic[0].WriteToPoint(oneOutPoint.plcpointAddress, "1", oneOutPoint.plcpointLength.ToString());
// firstEmptyEquip.emptyCount -= 1;
// dbContext.Update(firstEmptyEquip);
// dbContext.SaveChanges();
// HandyControl.Controls.MessageBox.Show("下发成功");
// }
// else
// {
// HandyControl.Controls.MessageBox.Show("一楼托盘库忙碌中,请稍后再试!");
// }
// }
//}
//else
//{
// HandyControl.Controls.MessageBox.Show("未找到一个托盘的库位");
// return;
//}
}
else
{
WcsTaskManual task = new()
{
objid = Global.SnowId.NextId(),
taskType = 54,
containerNo = startEquip.containerNo,
currPointId = startEquip.objid,
currPointNo = startEquip.equipNo,
nextPointId = agvEquip.objid,
nextPointNo = agvEquip.equipNo,
endPointId = baseEquip.objid,
endPointNo = baseEquip.equipNo,
createTime = DateTime.Now,
taskStatus = 0,
useFlag = 1,
floorNo = 2,
fromFloorNo = 2,
createBy = "WPF",
isEmpty = "0",
};
dbContext.Add(task);
dbContext.SaveChanges();
HandyControl.Controls.MessageBox.Show("任务生成成功!");
}
}
}
///
/// 读取一楼托盘库位是否空闲
///
///
private bool ReadEmptyLocation()
{
var oneOutPoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "oneOut");
var someOutPoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "someOut");
var oneInPoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "oneIn");
var someInPoint = SystemData.BasePlcpoints.First(t => t.plcpointNo == "someIn");
var oneOutValue = SystemData.PlcDic[0].Read(oneOutPoint.plcpointAddress);
var someOutValue = SystemData.PlcDic[0].Read(someOutPoint.plcpointAddress);
var oneInValue = SystemData.PlcDic[0].Read(oneInPoint.plcpointAddress);
var someInValue = SystemData.PlcDic[0].Read(someInPoint.plcpointAddress);
if (oneOutValue != null && someOutValue != null && oneInValue != null && someInValue != null)
{
if (Convert.ToInt32(oneOutValue) == 0 && Convert.ToInt32(someOutValue) == 0 && Convert.ToInt32(oneInValue) == 0 && Convert.ToInt32(someInValue) == 0)
{
return true;
}
}
return false;
}
private void clearLocation_Click(object sender, RoutedEventArgs e)
{
if (this.EmptyEquip.SelectedItem is BaseEquip equip)
{
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();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == equip.objid);
baseEquip.emptyCount = 0;
baseEquip.equipStatus = 0;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
HandyControl.Controls.MessageBox.Show("清除成功");
}
}
}
private void outLocation_Click(object sender, RoutedEventArgs e)
{
if (this.EmptyEquip.SelectedItem is BaseEquip equip)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == equip.objid);
if (baseEquip.objid ==38)
{
HandyControl.Controls.MessageBox.Show("废料区禁止直接出到楼层,请点击 废料区出托盘到周转区 按钮");
return;
}
if (baseEquip.ud3 !="2")
{
HandyControl.Controls.MessageBox.Show("不是废料禁止出到1楼或3楼");
return;
}
bool hastask = dbContext.WcsTask.Where(t => t.endPointId == baseEquip.objid || t.currPointId == baseEquip.objid).Any();
bool hasTaskManual = dbContext.WcsTaskManual.Where(t => t.currPointId == baseEquip.objid || t.endPointId == baseEquip.objid).Any();
if (hastask || hasTaskManual)
{
HandyControl.Controls.MessageBox.Show("已存在当前库位的任务");
return;
}
if (baseEquip.emptyCount > 0)
{
FloorForm floorForm = new FloorForm(new List() { 1, 3 });
floorForm.ShowDialog();
if (FloorForm.SelecetedFloorNo != 0)
{
WcsTaskManual task = new()
{
objid = Global.SnowId.NextId(),
taskType = 57,
containerNo = "00000000",
currPointId = baseEquip.objid,
currPointNo = baseEquip.equipNo,
nextPointId = 8,
qty = baseEquip.emptyCount,
endPointId = FloorForm.SelecetedFloorNo,
endPointNo = $"TSJ_0{FloorForm.SelecetedFloorNo}",
useFlag = 1,
taskStatus = 0,
fromFloorNo = 2,
floorNo = FloorForm.SelecetedFloorNo
};
dbContext.Add(task);
dbContext.SaveChanges();
HandyControl.Controls.MessageBox.Show("下发成功");
}
}
else
{
HandyControl.Controls.MessageBox.Show("库位已空!");
}
}
}
///
/// 任务完成
///
///
///
private void taskCompeleted_Click(object sender, RoutedEventArgs e)
{
}
private void querenruku_Click(object sender, RoutedEventArgs e)
{
if (!string.IsNullOrEmpty(this.firstRFID.Text))
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 1);
baseEquip.containerNo = null;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
HandyControl.Controls.MessageBox.Show("确认入库成功!");
}
else
{
HandyControl.Controls.MessageBox.Show("未扫描到RFID!");
}
}
///
/// 删除用户
///
///
///
private void deleteUser(object sender, RoutedEventArgs e)
{
try
{
if (UserData.SelectedItem is SysUser user)
{
if (user.OBJID == 1)
{
HandyControl.Controls.MessageBox.Show("不能删除根用户!");
return;
}
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
dbContext.SysUser.Remove(user);
dbContext.SaveChanges();
HandyControl.Controls.MessageBox.Show("删除成功!");
GetMenu();
}
}
catch
{
}
}
///
/// 搜索
///
///
///
private void SelectUser_Click(object sender, RoutedEventArgs e)
{
GetUser();
}
private void GetUser()
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
UserData.ItemsSource = dbContext.SysUser.WhereIf(!string.IsNullOrEmpty(LoginName.Text), t => t.UserName.Contains(LoginName.Text)).ToList();
}
///
/// 添加用户
///
///
///
private void AddUser_Click(object sender, RoutedEventArgs e)
{
}
private void GetMenu()
{
//using var scope = _host.Services.CreateScope();
//using var dbContext = scope.ServiceProvider.GetRequiredService();
//var sysMenus = dbContext.SysMenu.Where(t => t.MenuVisble == 1).ToList();
//var sysRoles = dbContext.SysRole.Where(t => t.UserId == UserId).ToList();
//List roleIds = sysRoles.Select(t => t.RoleId).ToList();
//foreach (var menu in sysMenus)
//{
// if (FindName(menu.MenuName) is TabItem tabItem)
// {
// if (roleIds.Contains(menu.OBJID))
// {
// tabItem.Visibility = Visibility.Visible;
// }
// else
// {
// tabItem.Visibility = Visibility.Collapsed;
// }
// }
//}
//if (sysRoles.Count() == 0)
//{
// TabControl.SelectedIndex = 0;
//}
}
private void SelectUserRole(object sender, RoutedEventArgs e)
{
try
{
if (UserData.SelectedItem is SysUser user)
{
//if (user.OBJID == 1)
//{
// HandyControl.Controls.MessageBox.Show("不能修改根用户!");
// return;
//}
MenuList menuList = new MenuList(_host, user.OBJID);
menuList.ShowDialog();
GetMenu();
}
}
catch
{
}
}
private void SelectInventoryButton_Click(object sender, RoutedEventArgs e)
{
this.PageControl3.PageInfo.CurrentPage = 1;
GetInvertoryData();
}
///
/// 添加盘库任务
///
///
///
private void AddInventoryButton_Click(object sender, RoutedEventArgs e)
{
InventoryMaterialWindow window = new InventoryMaterialWindow(_host);
window.ShowDialog();
}
private void GetInvertoryData()
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
try
{
int totalCount = dbContext.WmsInventoryCheck
.Where(t => t.WarehouseId == 512).Count();
var list = dbContext.WmsInventoryCheck
.Where(t => t.WarehouseId == 512)
.OrderByDescending(t => t.CreateTime).Skip((this.PageControl3.PageInfo.CurrentPage - 1) * this.pageCount).Take(this.pageCount).ToList();
this.PageControl3.PageInfo.TotalPage = totalCount / this.pageCount + totalCount % this.pageCount == 0 ? 0 : 1;
this.InventoryMaterial.ItemsSource = list.Select(t =>
new
{
InventoryCheckId = t.InventoryCheckId,
InventoriedAmount = t.InventoriedAmount,
BeginTime = t.BeginTime,
CheckStatus = t.CheckStatus == "0" ? "未开始" : t.CheckStatus == "1" ? "盘点中" : t.CheckStatus == "2" ? "已完成" : "",
CreateBy = t.CreateBy,
CreateTime = t.CreateTime,
EndTime = t.EndTime,
InventoryCheckCode = t.InventoryCheckCode,
InventoryingAmount = t.InventoryingAmount,
LocationAmount = t.LocationAmount,
Remark = t.Remark,
UpdateBy = t.UpdateBy,
UpdateTime = t.UpdateTime,
WarehouseId = t.WarehouseId,
StartContent = t.CheckStatus == "0" ? "开始盘点" : "继续盘点",
StartEnable = t.CheckStatus == "2" ? false : true,
EndEnable = t.CheckStatus == "2" ? false : true,
});
this.InventoryMaterial.Items.Refresh();
if (list.Count == 0)
{
HandyControl.Controls.MessageBox.Show("没有数据!");
}
}
catch
{
}
}
private void InventoryTaskButton_Click(object sender, RoutedEventArgs e)
{
InventoryTaskForm inventoryTaskForm = new InventoryTaskForm(this._host);
inventoryTaskForm.ShowDialog();
}
//选择出库
private void SelectOutBtn_Click(object sender, RoutedEventArgs e)
{
SelectOutRawForm selectOutRawForm = new SelectOutRawForm(this._host, "", 1);
selectOutRawForm.ShowDialog();
}
//选择退库
private void SelectReturnBtn_Click(object sender, RoutedEventArgs e)
{
SelectOutRawForm selectOutRawForm = new SelectOutRawForm(this._host, "1", 2);
selectOutRawForm.ShowDialog();
}
private void ContineOutBtn_Click(object sender, RoutedEventArgs e)
{
try
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
BaseEquip baseEquip = dbContext.BaseEquip.Where(t => t.objid == 10).First();
if (!string.IsNullOrEmpty(baseEquip.endStationCode))
{
List wcsTasks = dbContext.WcsTask.Where(t => t.taskType == 30).ToList();
if (wcsTasks != null && wcsTasks.Count > 0)
{
scanOutMsg.Text = "已经有出库任务请等待出库完成后,再进行继续出库!";
return;
}
baseEquip.IsOut = 1;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
scanOutMsg.Text = "继续出库成功!";
}
else
{
scanOutMsg.Text = "当前无正在出库单";
}
}
catch
{
}
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
// 触发按钮的点击事件
CallSelectedItem.Clear();
GetPersonCallMaterialData();
}
}
///
/// 扫描入库enter
///
///
///
private void ScanInKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
// 触发按钮的点击事件
ScanInBox();
}
}
#region 移库方法
private void rawSourceBox_TextChanged(object sender, RoutedEventArgs e)
{
if (this.rawSourceBox.Text.Length >= 1 && this.rawSourceBox.Text.Length < 15)
{
this.RemoveMsg.Text = "";
return;
}
try
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
//WcsTask? wcsTask = dbContext.WcsTask.Where(t => t.containerNo == this.rawSourceBox.Text).FirstOrDefault();
//if (wcsTask == null)
//{
// this.RemoveMsg.Text = $"未找到该托盘{this.rawSourceBox.Text}的移库任务!";
// this.rawSourceBox.Text = "";
// return;
//}
//else
{
rawSourceBarCode.Focus();
}
}
catch (Exception ex)
{
this.RemoveMsg.Text = ex.Message;
}
}
private void rawSourceBarCode_TextChanged(object sender, RoutedEventArgs e)
{
if (this.rawSourceBarCode.Text.Length < 19)
{
rawSourceMaterialName.Text = "";
rawSourceMaterialSpec.Text = "";
removeScan.Text = "";
return;
}
string barCode = rawSourceBarCode.Text;
try
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
WmsRawStock? wmsRawStock = dbContext.WmsRawStock.Where(t => t.palletInfoCode == this.rawSourceBox.Text)
.Where(t => t.instockBatch == barCode)
.FirstOrDefault();
if (wmsRawStock == null)
{
RemoveMsg.Text = $"未在{this.rawSourceBox.Text}托盘中找到{barCode}条码!";
rawSourceBarCode.Text = string.Empty;
rawSourceMaterialName.Text = "";
rawSourceMaterialSpec.Text = "";
return;
}
var material = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == barCode);
if (material == null)
{
RemoveMsg.Text = $"未查询{barCode}条码内容!";
rawSourceBarCode.Text = string.Empty;
}
else
{
var mesBaseMaterialInfo = dbContext.MesBaseMaterialInfo.FirstOrDefault(t => t.MaterialId == material.materialId);
if (mesBaseMaterialInfo == null)
{
RemoveMsg.Text = $"未查询{barCode}绑定的物料信息!";
rawSourceBarCode.Text = string.Empty;
}
else
{
rawSourceMaterialName.Text = mesBaseMaterialInfo.MaterialName;
rawSourceMaterialSpec.Text = mesBaseMaterialInfo.MaterialSpec;
this.removeScan.Text = string.Format("{0:0.00}", wmsRawStock.totalAmount - wmsRawStock.frozenAmount);
removeSourceBox.Focus();
}
}
}
catch (Exception ex)
{
RemoveMsg.Text = $"查询{barCode}条码内容异常!";
rawSourceBarCode.Text = string.Empty;
rawSourceMaterialName.Text = "";
rawSourceMaterialSpec.Text = "";
}
}
private void removeSourceBox_TextChanged(object sender, RoutedEventArgs e)
{
if (this.rawSourceBox.Text.Length >= 15)
{
removeSourceBarCode.Focus();
}
}
private void removeSourceBarCode_TextChanged(object sender, RoutedEventArgs e)
{
if (this.removeSourceBarCode.Text.Length < 19)
{
removeSourceMaterialName.Text = "";
removeSourceMaterialSpec.Text = "";
this.removeTotalStock.Text = "";
return;
}
string barCode = removeSourceBarCode.Text;
try
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
//WmsRawStock? wmsRawStock = dbContext.WmsRawStock.Where(t => t.palletInfoCode == this.removeSourceBox.Text)
// .Where(t => t.instockBatch == barCode)
// .FirstOrDefault();
//if (wmsRawStock == null)
//{
// RemoveMsg.Text = $"未在目标托盘中找到条码,请打印粘贴后重新扫描!";
// removeSourceBarCode.Text = string.Empty;
// removeSourceMaterialName.Text = "";
// removeSourceMaterialSpec.Text = "";
// return;
//}
var material = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == barCode);
if (material == null)
{
RemoveMsg.Text = $"未查询{barCode}条码信息!";
removeSourceBarCode.Text = string.Empty;
}
else
{
var mesBaseMaterialInfo = dbContext.MesBaseMaterialInfo.FirstOrDefault(t => t.MaterialId == material.materialId);
if (mesBaseMaterialInfo == null)
{
RemoveMsg.Text = $"未查询{barCode}绑定的物料信息!";
removeSourceBarCode.Text = string.Empty;
}
else
{
removeSourceMaterialName.Text = mesBaseMaterialInfo.MaterialName;
removeSourceMaterialSpec.Text = mesBaseMaterialInfo.MaterialSpec;
}
}
//判断目标库位是否有该物料
WmsRawStock? removeStock = dbContext.WmsRawStock.Where(t => t.instockBatch == this.removeSourceBarCode.Text && t.palletInfoCode == this.removeSourceBox.Text).FirstOrDefault();
if (removeStock != null)
{
this.removeTotalStock.Text = string.Format("{0:0.00}", removeStock.totalAmount);
}
}
catch (Exception ex)
{
RemoveMsg.Text = $"查询{barCode}条码内容异常!";
removeSourceBarCode.Text = string.Empty;
removeSourceMaterialName.Text = "";
removeSourceMaterialSpec.Text = "";
}
}
private void btnRemoveConfirmBox_Click(object sender, RoutedEventArgs e)
{
this.RemoveMsg.Text = "";
if (string.IsNullOrEmpty(this.rawSourceBox.Text))
{
this.RemoveMsg.Text = "请先选择原托盘!";
return;
}
if (string.IsNullOrEmpty(this.rawSourceBarCode.Text))
{
this.RemoveMsg.Text = "请先选择原条码!";
return;
}
if (string.IsNullOrEmpty(this.removeSourceBox.Text))
{
this.RemoveMsg.Text = "请先选择移库目标托盘!";
return;
}
if (string.IsNullOrEmpty(this.removeSourceBarCode.Text))
{
this.RemoveMsg.Text = "请先选择移库目标条码!";
return;
}
decimal amount = decimal.Parse(this.removeScan.Text);
if (amount <= 0)
{
this.RemoveMsg.Text = "移库数量需要大于0!";
return;
}
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
WmsRawStock? sourceWmsRawStock = dbContext.WmsRawStock
.Where(t => t.instockBatch == this.rawSourceBarCode.Text).FirstOrDefault();
if (sourceWmsRawStock == null)
{
this.RemoveMsg.Text = "该条码无库存,请核查";
return;
}
if (amount > (sourceWmsRawStock.totalAmount - sourceWmsRawStock.frozenAmount))
{
this.RemoveMsg.Text = "移库数量不能大于库存数量";
return;
}
try
{
WmsBaseLocation removeLocation = dbContext.WmsBaseLocation.Where(t => t.containerCode == this.removeSourceBox.Text).First();
WmsBaseLocation sourceLocation = dbContext.WmsBaseLocation.Where(t => t.containerCode == this.rawSourceBox.Text).First();
//1.先校验物料类型是否一致
var rawBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == this.rawSourceBarCode.Text);
var removeBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == this.removeSourceBarCode.Text);
if (rawBarcodeInfo.materialId != removeBarcodeInfo.materialId)
{
this.RemoveMsg.Text = "两个条码物料类型不同,请更换移库目标条码!";
return;
}
if (rawBarcodeInfo.PurchaseOrderId != removeBarcodeInfo.PurchaseOrderId)
{
this.RemoveMsg.Text = "两个条码采购订单不同,请更换移库目标条码!";
return;
}
//判断目标库位是否有该物料
WmsRawStock? removeStock = dbContext.WmsRawStock.Where(t => t.instockBatch == this.removeSourceBarCode.Text && t.palletInfoCode == this.removeSourceBox.Text).FirstOrDefault();
// WmsRawStock? removeStock = dbContext.WmsRawStock.Where(t => t.instockBatch == this.removeSourceBarCode.Text).FirstOrDefault();
if (removeStock != null)
{
sourceWmsRawStock.totalAmount -= decimal.Parse(this.removeScan.Text);
removeStock.totalAmount += decimal.Parse(this.removeScan.Text);
dbContext.WmsRawStock.Update(removeStock);
dbContext.WmsRawStock.Update(sourceWmsRawStock);
}
else
{
sourceWmsRawStock.totalAmount -= decimal.Parse(this.removeScan.Text);
removeStock = new WmsRawStock()
{
materialId = removeBarcodeInfo.materialId,
supplierId = removeBarcodeInfo.manufacturerId,
instockBatch = this.removeSourceBarCode.Text,
locationCode = removeLocation.locationCode,
stockType = "1",
palletInfoCode = removeLocation.containerCode,
totalAmount = decimal.Parse(this.removeScan.Text),
activeFlag = "1",
occupyAmount = 0,
completeFlag = "1",
frozenAmount = 0,
instockDate = System.DateTime.Now,
rawStockId = Global.SnowId.NextId(),
saleOrderId = removeBarcodeInfo.saleOrderId == null ? 0 : removeBarcodeInfo.saleOrderId,
warehouseFloor = 5,
warehouseId = 512,
createBy = "扫描入库",
createDate = System.DateTime.Now,
safeFlag = removeBarcodeInfo.safeFlag
};
dbContext.WmsRawStock.Add(removeStock);
dbContext.WmsRawStock.Update(sourceWmsRawStock);
}
if (sourceWmsRawStock.totalAmount == 0)
{
dbContext.WmsRawStock.Remove(sourceWmsRawStock);
}
#region 插入移库记录
WmsMove wmsMove = new WmsMove();
wmsMove.MoveId = Global.SnowId.NextId();
wmsMove.TaskCode = Global.SnowId.NextId().ToString();
wmsMove.WarehouseId = removeLocation.warehouseId;
wmsMove.OriLocationCode = sourceLocation.locationCode;
wmsMove.TargetLocationCode = removeLocation.locationCode;
wmsMove.InstockBatch = sourceWmsRawStock.instockBatch;
wmsMove.MaterialId = sourceWmsRawStock.materialId;
wmsMove.PlanAmount = decimal.Parse(this.removeScan.Text);
wmsMove.RealOutstockAmount = decimal.Parse(this.removeScan.Text);
wmsMove.RealInstockAmount = decimal.Parse(this.removeScan.Text);
wmsMove.OperationType = "1";
wmsMove.MoveWay = "1";
wmsMove.MoveType = "1";
wmsMove.AuditStatus = "1";
wmsMove.ExecuteStatus = "2";
wmsMove.UpdateBy = "WPF";
wmsMove.UpdateDate = DateTime.Now;
wmsMove.BeginTime = DateTime.Now;
wmsMove.EndTime = DateTime.Now;
WmsMoveDetail wmsMoveDetail = new WmsMoveDetail();
wmsMoveDetail.MoveId = wmsMove.MoveId;
wmsMoveDetail.MaterialBarcode = rawBarcodeInfo.barcodeInfo;
wmsMoveDetail.InstockBatch = rawBarcodeInfo.batchCode;
wmsMoveDetail.MaterialId = (long)rawBarcodeInfo.materialId;
wmsMoveDetail.LocationCode = removeLocation.locationCode;
wmsMoveDetail.PlanAmount = decimal.Parse(this.removeScan.Text);
wmsMoveDetail.RealInstockAmount = decimal.Parse(this.removeScan.Text);
wmsMoveDetail.RealAmount = decimal.Parse(this.removeScan.Text);
wmsMoveDetail.ExecuteStatus = "2";
wmsMoveDetail.ExecuteTime = DateTime.Now;
wmsMoveDetail.ExecuteEndTime = DateTime.Now;
wmsMoveDetail.ExecutePerson = "WPF";
wmsMoveDetail.UpdateBy = "WPF";
wmsMoveDetail.UpdateDate = DateTime.Now;
dbContext.WmsMove.Add(wmsMove);
dbContext.WmsMoveDetail.Add(wmsMoveDetail);
#endregion
dbContext.SaveChanges();
this.RemoveMsg.Text = $"移库成功!,原料箱库存:{string.Format("{0:0.00}", sourceWmsRawStock.totalAmount)},新料箱库存:{string.Format("{0:0.00}", removeStock.totalAmount)}";
removeSourceBarCode.Text = string.Empty;
removeSourceMaterialName.Text = "";
removeSourceMaterialSpec.Text = "";
rawSourceBarCode.Text = string.Empty;
rawSourceMaterialName.Text = "";
rawSourceMaterialSpec.Text = "";
this.removeScan.Text = "";
this.removeTotalStock.Text = "";
}
catch (Exception ex)
{
Console.Write("移库失败!,异常:" + ex.Message);
}
}
#endregion
private void OutEnter(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
// 触发按钮的点击事件
OutRaw();
}
}
private void LocationPersonBox_Click(object sender, RoutedEventArgs e)
{
if (sender is CheckBox check)
{
if (check.IsChecked == true)
{
if (LoadMaterial1.SelectedItem is LocationDto location)
{
locationDtos.Add(location);
}
}
else
{
if (LoadMaterial1.SelectedItem is LocationDto location)
{
locationDtos.Remove(location);
}
}
}
}
private void LockLocation_Click(object sender, RoutedEventArgs e)
{
if (locationDtos.Count == 0)
{
HandyControl.Controls.MessageBox.Show("请选择库位!");
return;
}
List locationCodes = locationDtos.Select(t => t.LocationCode).ToList();
MessageBoxResult messageBoxResult = HandyControl.Controls.MessageBox.Show($"锁定库位{string.Join("\n", locationCodes)}", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Question);
if (messageBoxResult == MessageBoxResult.OK)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
using var transaction = dbContext.Database.BeginTransaction();
try
{
List wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => locationCodes.Contains(t.locationCode)).ToList();
foreach (var location in wmsBaseLocations)
{
location.locationStatus = "3";
location.ExceptionDesc = "人工锁定";
SystemData.AlarmLocation(location, dbContext);
dbContext.Update(location);
}
dbContext.SaveChanges();
transaction.Commit();
locationDtos.Clear();
GetBaseLocations();
HandyControl.Controls.MessageBox.Show("锁定成功!");
}
catch
{
transaction.Rollback();
}
}
}
private void UnLockLocation_Click(object sender, RoutedEventArgs e)
{
if (locationDtos.Count == 0)
{
HandyControl.Controls.MessageBox.Show("请选择库位!");
return;
}
List locationCodes = locationDtos.Select(t => t.LocationCode).ToList();
MessageBoxResult messageBoxResult = HandyControl.Controls.MessageBox.Show($"解锁库位{string.Join("\n", locationCodes)}", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Question);
if (messageBoxResult == MessageBoxResult.OK)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
using var transaction = dbContext.Database.BeginTransaction();
try
{
List wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => locationCodes.Contains(t.locationCode)).ToList();
foreach (var location in wmsBaseLocations)
{
location.locationStatus = "1";
location.ExceptionDesc = "人工解锁";
SystemData.UnAlarmLocation(location, dbContext);
dbContext.Update(location);
}
dbContext.SaveChanges();
transaction.Commit();
locationDtos.Clear();
GetBaseLocations();
HandyControl.Controls.MessageBox.Show("解锁成功!");
}
catch
{
transaction.Rollback();
}
}
}
///
/// 取消预调度
///
///
///
private void CancelPreScheduling_Click(object sender, RoutedEventArgs e)
{
// 调用取消预调度接口
string executeResult = HttpHelper.SendPostMessage("172.16.12.100", 5001, "wcs/RecieveRcs/CancelPreScheduling", null, "application/Json");
// string executeResult = HttpHelper.SendPostMessage("127.0.0.1", 5001, "wcs/RecieveRcs/CancelPreScheduling", null, "application/Json");
var executeReponse = JsonConvert.DeserializeObject(executeResult);
if (executeReponse != null && executeReponse.code == "0")
{
MessageBox.Show("取消预调度成功!");
}
else
{
MessageBox.Show($"取消预调度失败!");
}
}
private void Refulsh_Click(object sender, RoutedEventArgs e)
{
DrawLocaitons();
}
private List GetLocations()
{
try
{
var wareHouse = WareHouseId.SelectedItem.ToString();
var warehouseId = new List();
if (wareHouse == "二楼仓库")
{
warehouseId.Add(231);
}
else if (wareHouse == "三楼仓库")
{
warehouseId.Add(311);
}
else if (wareHouse == "五楼仓库")
{
warehouseId.Add(511);
warehouseId.Add(521);
warehouseId.Add(531);
}
var scope = _host.Services.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService();
return dbContext.WmsBaseLocation.Where(t => warehouseId.Contains(t.warehouseId)).ToList();
}
catch
{
return new List();
}
}
private void DrawLocaitons()
{
loadLocations(GetLocations());
}
private void loadLocations(List wmsBaseLocations)
{
try
{
if (wmsBaseLocations == null || wmsBaseLocations.Count == 0)
{
return;
}
List baseEquips = new List();
if (wmsBaseLocations.First().warehouseFloor == 2)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
baseEquips = dbContext.BaseEquip.Where(t => t.equipType == 20).OrderBy(t => t.agvPositionCode).ToList();
}
else if (wmsBaseLocations.First().warehouseFloor == 3)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService();
baseEquips = dbContext.BaseEquip.Where(t => t.equipType == 15).OrderBy(t => t.agvPositionCode).ToList();
}
Dispatcher.Invoke(() =>
{
this.LocaltionGrid.Children.Clear();
this.LocaltionGrid.RowDefinitions.Clear();
this.LocaltionGrid.ColumnDefinitions.Clear();
List list = wmsBaseLocations.Select(t => t.warehouseId).Distinct().ToList();
int? column = 0;
for (var i = 0; i < list.Count; i++)
{
this.LocaltionGrid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1.0, GridUnitType.Star) });
var grid = new Grid();
List locations = wmsBaseLocations.Where(t => t.warehouseId == list[i]).ToList();
var row = locations.Max(t => t.locRow);
column = locations.Max(t => t.locColumn);
if (list[0] == 231 && i == 0)
{
grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1.0, GridUnitType.Star) });
grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1.0, GridUnitType.Star) });
}
for (var j = 0; j < row; j++)
{
grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1.0, GridUnitType.Star) });
}
for (var j = 0; j < column; j++)
{
grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1.0, GridUnitType.Star) });
}
foreach (var location in locations)
{
var button = new Button()
{
Name = $"Location{location.locationCode}",
Content = location.locationCode,
Width = 50,
Height = 50,
Margin = new Thickness(2),
Tag = location.locationId,
Background = string.IsNullOrEmpty(location.containerCode) ? new SolidColorBrush((Color)ColorConverter.ConvertFromString("#4789AE")) : new SolidColorBrush((Color)ColorConverter.ConvertFromString("#75F76D"))
};
// 添加小红点逻辑
if (location.locationStatus != "1")
{
var redDot = new Ellipse()
{
Width = 7,
Height = 7,
Fill = Brushes.Red,
VerticalAlignment = VerticalAlignment.Top,
HorizontalAlignment = HorizontalAlignment.Right,
Margin = new Thickness(0, -5, 0, 2) // 调整位置使其在右上角
};
button.Content = new Grid()
{
Children =
{
new TextBlock() { Text = location.locationCode },
redDot
}
};
}
button.Click += OnLocationButton_Click;
Grid.SetColumn(button, location.locColumn.Value - 1);
if (list[0] == 231)
{
Grid.SetRow(button, -(location.locRow.Value - row.Value) + 2);
for (var k = 0; k < 8; k++)
{
var button2 = new Button()
{
Content = baseEquips[k].agvPositionCode + $"({baseEquips[k].emptyCount})",
Name = baseEquips[k].agvPositionCode,
Width = 100,
Height = 50,
FontSize = 15,
Margin = new Thickness(2),
Background = baseEquips[k].emptyCount > 0 ? new SolidColorBrush((Color)ColorConverter.ConvertFromString("#75F76D")) : new SolidColorBrush((Color)ColorConverter.ConvertFromString("#4789AE")),
};
Grid.SetColumn(button2, k % 4 * 2 + 1);
Grid.SetRow(button2, -((k / 4) - 1));
Grid.SetColumnSpan(button2, 2);
grid.Children.Add(button2);
}
}
else
{
#region 五楼4、5行颠倒
if (location.warehouseId == 511)
{
int locRow = location.locRow.Value;
if (locRow == 1)
{
locRow = 2;
}
else if (locRow == 2)
{
locRow = 1;
}
Grid.SetRow(button, -(locRow - row.Value));
}
else
{
Grid.SetRow(button, -(location.locRow.Value - row.Value));
}
// Grid.SetRow(button, -(location.locRow.Value - row.Value));
#endregion
if (list[0] == 311)
{
for (var k = 0; k < 3; k++)
{
var button2 = new Button()
{
Content = baseEquips[k].agvPositionCode + $"({baseEquips[k].emptyCount})",
Name = baseEquips[k].agvPositionCode,
Width = 100,
Height = 50,
FontSize = 15,
Margin = new Thickness(2),
Background = baseEquips[k].emptyCount > 0 ? new SolidColorBrush((Color)ColorConverter.ConvertFromString("#75F76D")) : new SolidColorBrush((Color)ColorConverter.ConvertFromString("#4789AE")),
};
Grid.SetColumn(button2, k % 4 * 2 + 17);
Grid.SetRow(button2, -((k / 4) - 1));
Grid.SetColumnSpan(button2, 2);
grid.Children.Add(button2);
}
}
}
grid.Children.Add(button);
}
Grid.SetRow(grid, i);
this.LocaltionGrid.Children.Add(grid);
}
});
}
catch
{
}
}
private void OnLocationButton_Click(object sender, RoutedEventArgs e)
{
if (sender is Button button)
{
if (button.Tag is long locationId)
{
StockWindow stockWindow = new StockWindow(_host, locationId);
stockWindow.ShowDialog();
}
}
}
private void WareHouseId_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
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();
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(bearAgvTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
}
}
private void PageControl1_PreviousPageClicked(object sender, RoutedEventArgs e)
{
this.PageControl1.PageInfo.CurrentPage--;
if (this.PageControl1.PageInfo.CurrentPage < 1)
{
this.PageControl1.PageInfo.CurrentPage = 1;
}
GetLocations();
}
private void PageControl1_NextPageClicked(object sender, RoutedEventArgs e)
{
this.PageControl1.PageInfo.CurrentPage++;
if (this.PageControl1.PageInfo.CurrentPage > this.PageControl1.PageInfo.TotalPage)
{
this.PageControl1.PageInfo.CurrentPage = this.PageControl1.PageInfo.TotalPage;
}
GetLocations();
}
private void PageControl2_PreviousPageClicked(object sender, RoutedEventArgs e)
{
this.PageControl2.PageInfo.CurrentPage--;
if (this.PageControl2.PageInfo.CurrentPage < 1)
{
this.PageControl2.PageInfo.CurrentPage = 1;
}
GetPersonCallMaterialData();
}
private void PageControl2_NextPageClicked(object sender, RoutedEventArgs e)
{
this.PageControl2.PageInfo.CurrentPage++;
if (this.PageControl2.PageInfo.CurrentPage > this.PageControl2.PageInfo.TotalPage)
{
this.PageControl2.PageInfo.CurrentPage = this.PageControl2.PageInfo.TotalPage;
}
GetPersonCallMaterialData();
}
private void PageControl3_PreviousPageClicked(object sender, RoutedEventArgs e)
{
this.PageControl3.PageInfo.CurrentPage--;
if (this.PageControl3.PageInfo.CurrentPage < 1)
{
this.PageControl3.PageInfo.CurrentPage = 1;
}
GetInvertoryData();
}
private void PageControl3_NextPageClicked(object sender, RoutedEventArgs e)
{
this.PageControl3.PageInfo.CurrentPage++;
if (this.PageControl3.PageInfo.CurrentPage > this.PageControl3.PageInfo.TotalPage)
{
this.PageControl3.PageInfo.CurrentPage = this.PageControl3.PageInfo.TotalPage;
}
GetInvertoryData();
}
///
/// 提升机报警信息查询
///
///
///
private void HoistWarnInfoButton_Click(object sender, RoutedEventArgs e)
{
HoistWarnInfoWindow window = new HoistWarnInfoWindow(_host);
window.ShowDialog();
}
///
/// 提升机报警异常处理
///
///
///
private void HoistWarnHandlerButton_Click(object sender, RoutedEventArgs e)
{
HoistWarnHandlerWindow window = new HoistWarnHandlerWindow(_host);
window.ShowDialog();
}
}
}