You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

6054 lines
281 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
{
/// <summary>
/// FormBoardT.xaml 的交互逻辑
/// </summary>
public partial class FormBoardT : Window
{
private List<long> productIds = new List<long>() { 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<BasePlcpoint> basePlcpoints = new List<BasePlcpoint>();
object timerjilu;
Dictionary<long, bool> SelectedItem = new Dictionary<long, bool>();
Dictionary<long, bool> InSelectedItem = new Dictionary<long, bool>();
List<long?> CallSelectedItem = new List<long?>();
public List<MesBaseBarcodeInfo> barcodeLsit = new List<MesBaseBarcodeInfo>();
private int pageCount = 15;
private object updateLock = new object();
private readonly List<LocationDto> locationDtos = new List<LocationDto>();
private ObservableCollection<SelectItemModel> 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();
}
/// <summary>
/// 3楼向其他楼层输出托盘流程时AGV把托盘放置到接驳位后在调度界面增加“托盘入轿厢等待确认”提示信息
/// 计算任务等待时长
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CalculateTaskWaitTime(object? sender, ElapsedEventArgs e)
{
try
{
using var scope = _host.Services.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
// 给提升机已经下发入库指令判断超时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}");
}
}
/// <summary>
/// 页面加载事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FormBoard_Loaded(object sender, RoutedEventArgs e)
{
InitializeData(1);
this.WareHouseId.ItemsSource = new List<string>
{
"二楼仓库","三楼仓库","五楼仓库"
};
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<SelectItemModel>();
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<DefaultDbContext>();
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<DefaultDbContext>();
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<DefaultDbContext>();
// 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<string> list = new List<string>
// {
// "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);
}
}
/// <summary>
/// 检查版本
/// </summary>
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<string>
{
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<DefaultDbContext>();
// 该侧所有库位
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<Location>();
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<DefaultDbContext>();
List<BaseEquip> baseEquips = dbContext.BaseEquip.Where(t => t.equipType == 10).ToList();
var endStationCodes = baseEquips.Select(t => t.agvPositionCode).ToList();
while (true)
{
try
{
dbContext.ChangeTracker.Clear();
List<WmsRawReturn> 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<string> list = wmsRawReturns.Select(t => t.endStationCode).ToList();
List<long?> 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<WmsRawReturn> wmsRawReturnList = wmsRawReturns.Where(x => x.endStationCode == wcsTask.currPointNo).ToList();
if (wmsRawReturnList != null && wmsRawReturnList.Count > 0)
{
List<long?> materialIds = wmsRawReturnList.Select(t => t.materialId).ToList();
List<MesBaseMaterialInfo> 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<WcsTask> wcsTasks = dbContext.WcsTask.Where(t => t.taskType == 30).Where(t => orderIds.Contains(t.orderId)).ToList();
// List<string> containerNos = wcsTasks.Select(t => t.containerNo).ToList();
// List<WmsRawStock> 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<WmsRawReturn> endStationCodeOutRaw = wmsRawReturns.Where(t => baseEquip.endStationCode.Contains(t.endStationCode)).ToList();
// List<long?> materialIds = endStationCodeOutRaw.Select(t => t.materialId).ToList();
// List<MesBaseMaterialInfo> 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<DefaultDbContext>();
List<BaseEquip> 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<WmsRawOutstock> 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<string> 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<long?> 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<WmsRawOutstock> 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<WcsTask> wcsTasks = dbContext.WcsTask.Where(t => t.taskType == 30 && targetRawOutstocks.Select(d => d.materialId).Contains(t.materialId)).ToList();
List<string> containerNos = wcsTasks.Select(t => t.containerNo).ToList();
//本次所有托盘携带的物料
List<WmsRawStock> 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<string>();
try
{
list1 = JsonConvert.DeserializeObject<List<string>>(nowStationCode);
}
catch
{
}
List<long?> materialIds = RawOutstocks.Select(t => t.materialId).ToList();
List<MesBaseMaterialInfo> 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<WcsTask> wcsTasks = dbContext.WcsTask.Where(t => t.taskType == 30).Where(t => orderIds.Contains(t.orderId)).ToList();
//List<string> containerNos = wcsTasks.Select(t => t.containerNo).ToList();
//List<WmsRawStock> 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<WmsRawOutstock> endStationCodeOutRaw = wmsRawOutstocks.Where(t => t.endStationCode == baseEquip.endStationCode).ToList();
//List<long?> materialIds = endStationCodeOutRaw.Select(t => t.materialId).ToList();
//List<MesBaseMaterialInfo> 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<string, string> agvDic = new Dictionary<string, string>
{
{"6011","五楼潜伏" },
{"2034","五楼叉车" },
{"8161","五楼CTU" },
{"2032","三楼叉车" },
{"2033","二楼叉车" },
};
private void AgvStatus()
{
using var scope = _host.Services.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
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<DefaultDbContext>();
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
{
}
}
/// <summary>
/// 显示序号事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dgData_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.Header = e.Row.GetIndex() + 1;
}
/// <summary>
/// 点击退出按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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;
/// <summary>
/// 查询任务
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
// List<WcsTaskLog> wcsTaskLogs = new List<WcsTaskLog>();
// 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<DefaultDbContext>();
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> taskModel = CoreMapper.Map<List<taskModel>>(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();
});
}
/// <summary>
/// 删除任务
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
List<long?> ids = new List<long?>();
foreach (var item in SelectedItem)
{
if (item.Value == true)
{
ids.Add(item.Key);
}
}
BaseEquip agvEquip = SystemData.BaseEquip.First(t => t.objid == 10);
List<WcsTask> 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
{
}
}
}
/// <summary>
/// 完成任务
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
Currentselected.taskStatus = 5;
dbContext.Update(Currentselected);
dbContext.SaveChanges();
GetTask();
}
}
/// <summary>
/// 查询设备信息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnGetEquip_Click(object sender, RoutedEventArgs e)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
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("未查询到数据");
}
}
/// <summary>
/// 查询库存信息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnGetStocK_Click(object sender, RoutedEventArgs e)
{
//Pagination1.PageIndex = 1;
this.PageControl1.PageInfo.CurrentPage = 1;
this.EquipListSelectDy.SelectedIndex = -1;
locationDtos.Clear();
GetBaseLocations();
}
/// <summary>
/// 获取库位信息
/// </summary>
private void GetBaseLocations()
{
if (WarehourseId.SelectedItem is WmsBaseWarehouse warehouse)
{
var scope = _host.Services.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
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<LocationDto>(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;
}
}
///// <summary>
///// 查询指令信息
///// </summary>
///// <param name="sender"></param>
///// <param name="e"></param>
//private void btnGetWcsCmd_Click(object sender, RoutedEventArgs e)
//{
// GetWcsCmd();
//}
//private void GetWcsCmd()
//{
// using var scope = _host.Services.CreateScope();
// using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
// 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("未查询到数据");
// }
//}
///// <summary>
///// 删除指令
///// </summary>
///// <param name="sender"></param>
///// <param name="e"></param>
//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<DefaultDbContext>();
// Currentselected.useFlag = 0;
// dbContext.WcsCmd.Update(Currentselected);
// dbContext.SaveChanges();
// GetWcsCmd();
// }
//}
///// <summary>
///// 重发指令
///// </summary>
///// <param name="sender"></param>
///// <param name="e"></param>
//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<DefaultDbContext>();
// Currentselected.sendFlag = 0;
// dbContext.WcsCmd.Update(Currentselected);
// dbContext.SaveChanges();
// GetWcsCmd();
// }
//}
///// <summary>
///// 呼叫料箱
///// </summary>
///// <param name="sender"></param>
///// <param name="e"></param>
//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<DefaultDbContext>();
// 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
// {
// }
//}
/// <summary>
/// 料箱扫描
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
//private void txtBox_KeyDown(object sender, KeyEventArgs e)
//{
// if (e.Key == Key.Enter)
// {
// txtBarCode.Focus();
// }
//}
///// <summary>
///// 条码扫描
///// </summary>
///// <param name="sender"></param>
///// <param name="e"></param>
//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<DefaultDbContext>();
// 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
// {
// }
//}
/// <summary>
/// 确认
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
// 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<WmsRawStock> 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<WmsRawStock> 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
//{
//}
}
/// <summary>
/// 退出程序
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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);
}
}
/// <summary>
/// 获取聚焦打开键盘
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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);
}
}
/// <summary>
/// 失去焦点,关闭软键盘
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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);
}
}
/// <summary>
/// 背负式小车确认完成
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
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<string>? list = JsonConvert.DeserializeObject<List<string>>(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<WcsTask>(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<WcsTaskLog>(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);
}
}
/// <summary>
/// 获取到所有控件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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();
}
}
/// <summary>
/// 添加任务
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void AddTaskButton_Click(object sender, RoutedEventArgs e)
{
AddTask addTask = new AddTask(_host);
addTask.ShowDialog();
}
///// <summary>
///// 清除RFID
///// </summary>
///// <param name="sender"></param>
///// <param name="e"></param>
//private void clearRFID_Click(object sender, RoutedEventArgs e)
//{
// txtBox.Text = string.Empty;
//}
///// <summary>
///// 清除条码
///// </summary>
///// <param name="sender"></param>
///// <param name="e"></param>
//private void clearBarCode_Click(object sender, RoutedEventArgs e)
//{
// txtScan.Text = string.Empty;
// barcodeLsit.Clear();
// txtBarCode.Text = string.Empty;
//}
///// <summary>
///// 人工叫料失去焦点
///// </summary>
///// <param name="sender"></param>
///// <param name="e"></param>
//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<DefaultDbContext>();
// var material = dbContext.WmsRawStock.Where(t => t.instockBatch == callMaterialId.Text).FirstOrDefault();
// if (material == null)
// {
// HandyControl.Controls.MessageBox.Show("批次号不存在!");
// callMaterialId.Text = string.Empty;
// }
// else
// {
// }
// }
// }
// catch
// {
// }
//}
/// <summary>
/// 开始任务
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
List<WcsTask> wcsTasks = dbContext.WcsTask.ToList();
List<long> ids = new List<long>();
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);
}
}
/// <summary>
/// 打开任务历史记录界面
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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);
}
}
/// <summary>
/// 单选
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
if (sender is CheckBox checkbox && LoadMaterial0.SelectedItem is taskModel Currentselected)
{
SelectedItem[Currentselected.objid] = checkbox.IsChecked ?? false;
}
}
/// <summary>
/// 单选
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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);
}
}
}
}
/// <summary>
/// 删除选中的值
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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);
}
}
/// <summary>
/// 刷新
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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);
}
}
/// <summary>
/// 开始任务
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnCtuInConfirmBox_Click(object sender, RoutedEventArgs e)
{
try
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
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
{
}
}
/// <summary>
/// 页码改变时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Pagination_PageUpdated(object sender, HandyControl.Data.FunctionEventArgs<int> e)
{
GetBaseLocations();
}
/// <summary>
/// 物料名称
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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();
}
/// <summary>
/// 入库扫描
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
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<WmsRawStock> 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;
}
/// <summary>
/// 入库扫描
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
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<WmsRawStock> 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 = ("入库失败");
}
}
/// <summary>
/// 入库容器改变
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
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
{
}
}
/// <summary>
/// 入库条码改变
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
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
{
}
}
/// <summary>
/// 出库容器改变
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
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
{
}
}
/// <summary>
/// 出库条码改变
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
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
{
}
}
/// <summary>
/// 出库容器改变
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
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
{
}
}
/// <summary>
/// 出库条码改变
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
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
{
}
}
/// <summary>
/// 出库扫描
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
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<WmsRawOutstock>();
List<string> list = new List<string>();
try
{
list = JsonConvert.DeserializeObject<List<string>>(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<List<string>>(baseEquip.endStationCode);
// var wmsRawOutstocks = dbContext.WmsRawOutstock
// .Where(t => t.materialId == mesBaseBarcodeInfo.materialId && t.realOutstockAmount < t.outstockAmount && t.saleOrderId == (mesBaseBarcodeInfo.saleOrderId == null ? 0 : mesBaseBarcodeInfo.saleOrderId) && baseEquip.endStationCode.Contains(t.endStationCode))
// .ToList();
// WmsRawOutstock wmsRawOutstock = null;
// foreach (var item in list)
// {
// wmsRawOutstock ??= wmsRawOutstocks.Where(t => t.endStationCode == item).FirstOrDefault();
// }
// if (wmsRawOutstock != null)
// {
// wmsRawOutstock.realOutstockAmount += outScan;
// if (wmsRawOutstock.outstockAmount == wmsRawOutstock.realOutstockAmount)
// {
// wmsRawOutstock.executeStatus = "2";
// }
// else if (wmsRawOutstock.realOutstockAmount > wmsRawOutstock.outstockAmount)
// {
// scanOutMsg.Text = "出库数量不能大于申请单数量,当前出库数量为:" + (wmsRawOutstock.realOutstockAmount - outScan) + ",申请单数量为:" + wmsRawOutstock.outstockAmount + "!";
// return;
// }
// wmsRawStock.totalAmount -= outScan;
// if (wmsRawStock.totalAmount <= 0)
// {
// dbContext.Remove(wmsRawStock);
// dbContext.Update(wmsRawOutstock);
// }
// else
// {
// dbContext.Update(wmsRawStock);
// dbContext.Update(wmsRawOutstock);
// }
// if (mesBaseBarcodeInfo != null)
// {
// WmsRawOutstockDetail wmsProductOutstockDetail = new WmsRawOutstockDetail()
// {
// rawOutstockDetailId = Global.SnowId.NextId(),
// rawOutstockId = wmsRawOutstock.rawOutstockId,
// materialId = mesBaseBarcodeInfo.materialId,
// createDate = DateTime.Now,
// createBy = "WCS",
// taskCode = wcsTask.objid.ToString(),
// executeStatus = "2",
// locationCode = wcsTask.currPointNo,
// outstockAmount = outScan,
// planAmount = outScan,
// warehouseId = 512,
// materialBarcode = mesBaseBarcodeInfo.barcodeInfo,
// instockBatch = mesBaseBarcodeInfo.batchCode,
// stackAmount = outScan,
// outstockPerson = "WCS",
// outstockTime = DateTime.Now,
// outstockWay = "2",
// materialProductionDate = mesBaseBarcodeInfo.productionDate
// };
// dbContext.WmsRawOutstockDetail.Add(wmsProductOutstockDetail);
// }
// dbContext.SaveChanges();
// }
// else
// {
// // 没有申请单
// // 如果选中了出库单,并且无需要出库的申请单,则禁止出库
// //if (!string.IsNullOrEmpty(baseEquip.endStationCode))
// //{
// // scanOutMsg.Text = "申请单里该条码无需出库!";
// // return;
// //}
// if (wmsRawStock.safeFlag != "1")
// {
// scanOutMsg.Text = "该条码不是安全库存,且无申请单,禁止出库!";
// return;
// }
// if (mesBaseBarcodeInfo.PurchaseOrderId == null)
// {
// wmsRawStock.totalAmount -= outScan;
// if (wmsRawStock.totalAmount == 0)
// {
// dbContext.WmsRawStock.Remove(wmsRawStock);
// }
// else
// {
// dbContext.WmsRawStock.Update(wmsRawStock);
// }
// #region 插入rawOutstock
// string timeStamp = DateTime.Now.ToString("yyyyMMddHHmmss");
// WmsRawOutstock newWmsRawOutstock = new WmsRawOutstock();
// newWmsRawOutstock.taskCode = timeStamp + "CTU" + Random.Shared.Next(10, 99);
// newWmsRawOutstock.warehouseId = 512;
// newWmsRawOutstock.locationCode = wcsTask.currPointNo;
// newWmsRawOutstock.stationId = 512;
// newWmsRawOutstock.materialId = mesBaseBarcodeInfo.materialId;
// newWmsRawOutstock.materialBatch = mesBaseBarcodeInfo.barcodeInfo;
// newWmsRawOutstock.palletInfoCode = wcsTask.containerNo;
// newWmsRawOutstock.outstockAmount = outScan;
// newWmsRawOutstock.realOutstockAmount = outScan;
// newWmsRawOutstock.operationType = "1";
// newWmsRawOutstock.taskType = "1";
// newWmsRawOutstock.auditStatus = "1";
// newWmsRawOutstock.applyBy = "CtuGun";
// newWmsRawOutstock.applyDate = DateTime.Now;
// newWmsRawOutstock.executeStatus = "2";
// newWmsRawOutstock.saleOrderId = mesBaseBarcodeInfo.saleOrderId;
// newWmsRawOutstock.updateDate = DateTime.Now;
// newWmsRawOutstock.beginTime = DateTime.Now;
// newWmsRawOutstock.endTime = DateTime.Now;
// dbContext.WmsRawOutstock.Add(newWmsRawOutstock);
// dbContext.SaveChanges();
// #endregion
// //if (mesBaseBarcodeInfo != null)
// //{
// // WmsRawOutstockDetail wmsProductOutstockDetail = new WmsRawOutstockDetail()
// // {
// // rawOutstockDetailId = Global.SnowId.NextId(),
// // rawOutstockId = 0,
// // materialId = mesBaseBarcodeInfo.materialId,
// // createDate = DateTime.Now,
// // createBy = "WCS",
// // taskCode = wcsTask.objid.ToString(),
// // executeStatus = "2",
// // locationCode = wcsTask.currPointNo,
// // outstockAmount = outScan,
// // planAmount = outScan,
// // warehouseId = 512,
// // materialBarcode = mesBaseBarcodeInfo.barcodeInfo,
// // instockBatch = mesBaseBarcodeInfo.batchCode,
// // stackAmount = outScan,
// // outstockPerson = "WCS",
// // outstockTime = DateTime.Now,
// // outstockWay = "2",
// // materialProductionDate = mesBaseBarcodeInfo.productionDate
// // };
// // dbContext.WmsRawOutstockDetail.Add(wmsProductOutstockDetail);
// //}
// // dbContext.SaveChanges();
// }
// else
// {
// scanOutMsg.Text = "该条码的销售订单不正确";
// txtOutScan.Text = string.Empty;
// txtOutBarCode.Text = string.Empty;
// outMaterialSpecTxt.Text = string.Empty;
// outMaterialNameTxt.Text = string.Empty;
// txtOutBox.Text = string.Empty;
// txtOutBox.Focus();
// return;
// }
// }
// scanOutMsg.Text = "出库成功!";
// txtOutScan.Text = string.Empty;
// txtOutBarCode.Text = string.Empty;
// outMaterialSpecTxt.Text = string.Empty;
// outMaterialNameTxt.Text = string.Empty;
// txtOutBox.Text = string.Empty;
// txtOutBox.Focus();
// }
// else
// {
// scanOutMsg.Text = "未查询到该条码信息!";
// }
// }
//}
//else
//{
// scanOutMsg.Text = "请先扫描容器号和条码!";
//}
#endregion
}
catch (Exception ex)
{
scanOutMsg.Text = "出库失败" + ex;
}
}
/// <summary>
/// 搜索
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SelectButton_Click(object sender, RoutedEventArgs e)
{
this.PageControl2.PageInfo.CurrentPage = 1;
CallSelectedItem.Clear();
GetPersonCallMaterialData();
}
/// <summary>
/// 获取人员呼叫的物料数据
/// </summary>
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<DefaultDbContext>();
List<long?> materialIds = new List<long?>();
List<MesBaseMaterialInfo> materialInfos = new List<MesBaseMaterialInfo>();
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<WmsRawStock> 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
{
}
}
/// <summary>
/// 页码改变时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void Pagination2_PageUpdated(object sender, HandyControl.Data.FunctionEventArgs<int> e)
{
GetPersonCallMaterialData();
}
/// <summary>
/// 页码改变时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Pagination3_PageUpdated(object sender, HandyControl.Data.FunctionEventArgs<int> e)
{
GetInvertoryData();
}
/// <summary>
/// 开始盘点
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
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<string>? locationCodeList = null;
if (!string.IsNullOrEmpty(InventoryCheck.MaterialId))
{
List<long> 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<string> locationCodes = wmsInventoryCheckDetails.Select(t => t.LocationCode).Distinct().ToList();
wmsBaseLocations.RemoveAll(t => locationCodes.Contains(t.locationCode));
if (wmsBaseLocations.Count > 0)
{
List<string> locations = wmsBaseLocations.Select(t => t.locationCode).ToList();
List<WmsRawStock> wmsRawStocks = dbContext.WmsRawStock.Where(t => t.warehouseId == 512)
.Where(t => locations.Contains(t.locationCode)).ToList();
// 过滤后需要满足条件的有库存的库位
List<string> 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<WcsTaskManual> addList = new List<WcsTaskManual>();
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<long?> 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<WmsInventoryCheckDetail> addCheckDetail = new List<WmsInventoryCheckDetail>();
foreach (var item in addList)
{
List<WmsRawStock> 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();
}
/// <summary>
/// 结束盘点
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
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);
}
}
/// <summary>
/// 查看盘点详情界面
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OpenInventoryDetails(object sender, RoutedEventArgs e)
{
dynamic wmsInventoryCheck = this.InventoryMaterial.SelectedItem;
long inventoryCheckId = wmsInventoryCheck.InventoryCheckId;
InventoryDetails inventoryDetails = new InventoryDetails(_host, inventoryCheckId);
inventoryDetails.ShowDialog();
}
/// <summary>
/// 叫空料箱
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
//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<string> palletInfoCodes = wmsRawStock.Select(t => t.palletInfoCode).ToList();
wmsBaseLocation.RemoveAll(t => palletInfoCodes.Contains(t.containerCode));
if (wmsBaseLocation.Count > 0 && EmptyCountForm.EmptyTaskCount <= wmsBaseLocation.Count)
{
List<WcsTaskManual> addList = new List<WcsTaskManual>();
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
{
}
}
/// <summary>
/// 叫托盘
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CallTrayBtn_Click(object sender, RoutedEventArgs e)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
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<long> 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<WcsTaskManual> addList = new List<WcsTaskManual>();
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<WmsBaseLocation> 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
{
}
}
}
/// <summary>
/// 叫托盘
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void RemoveTrayBtn_Click(object sender, RoutedEventArgs e)
{
try
{
BaseEquip ctuEquip = SystemData.BaseEquip.First(t => t.objid == 11);
BaseEquip endEquip = SystemData.BaseEquip.First(t => t.objid == 20);
List<WcsTaskManual> taskList = new List<WcsTaskManual>();
if (itemsControlItems.Count == 0)
{
HandyControl.Controls.MessageBox.Show("请选择料箱!");
return;
}
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
List<long> idList = itemsControlItems.Select(x => x.baseLocationId).ToList();
if (idList.Count == 0)
{
HandyControl.Controls.MessageBox.Error("请选择需要移库的料箱!");
return;
}
else
{
if (idList.Count == 1)
{
List<WmsBaseLocation> emptyLocations = dbContext.ExecuteSqlQuery<WmsBaseLocation>(@$"
select t1.location_id locationId,
t1.container_code containerCode,
t1.location_code locationCode
from wms_base_location t1
left join wms_raw_stock t2
on t1.location_code=t2.location_code
where t2.location_code is null and t1.location_status=1
and t1.container_status=1 and t1.warehouse_id=512
order by t1.loc_column,t1.loc_row
");
var wmsLocation = dbContext.WmsBaseLocation.FirstOrDefault(t => t.locationId == idList[0] && t.locationStatus == "1");
if (wmsLocation == null)
{
HandyControl.Controls.MessageBox.Error("选择的料箱错误,请重新选择!");
return;
}
if (emptyLocations.Count == 0)
{
HandyControl.Controls.MessageBox.Error("只选择了一个移库料箱,但是没有空箱库位库位,无法移库!");
return;
}
MessageBoxResult messageBoxResult = HandyControl.Controls.MessageBox.Show("选择了一个移库料箱,需要出空料箱,是否确认?", "提示", MessageBoxButton.YesNo, MessageBoxImage.Question);
if (messageBoxResult == MessageBoxResult.Yes)
{
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<WmsBaseLocation> wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => idList.Contains(t.locationId))
.Where(t => t.ContainerStatus == "1")
.Where(t => t.locationStatus == "1")
.ToList();
if (wmsBaseLocations.Count != 2)
{
HandyControl.Controls.MessageBox.Error("选择的料箱库位状态异常,请重新选择!");
return;
}
foreach (var item in wmsBaseLocations)
{
taskList.Add(new WcsTaskManual()
{
objid = Global.SnowId.NextId(),
taskType = 102,
containerNo = item.containerCode,
startPointId = item.locationId,
startPointNo = item.locationCode,
currPointId = item.locationId,
currPointNo = item.locationCode,
nextPointId = ctuEquip.objid,
nextPointNo = ctuEquip.equipNo,
endPointId = endEquip.objid,
endPointNo = endEquip.equipNo,
createTime = DateTime.Now,
ud1 = item.locColumn,
taskStatus = 0,
remark = "CTU托盘任务",
floorNo = 5,
fromFloorNo = 5,
useFlag = 1
});
item.ContainerStatus = "2";
item.locationStatus = "6";
dbContext.Update(item);
}
dbContext.AddRange(taskList);
dbContext.SaveChanges();
HandyControl.Controls.MessageBox.Show("移库任务创建成功!");
itemsControlItems.Clear();
CallSelectedItem.Clear();
GetPersonCallMaterialData();
}
else if (idList.Count > 2)
{
HandyControl.Controls.MessageBox.Error("选择料箱不能超过2个");
return;
}
}
}
catch
{
}
}
/// <summary>
/// 执行CTU任务
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
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<DefaultDbContext>();
List<WmsInventoryCheckDetail> 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<DefaultDbContext>();
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<DefaultDbContext>();
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<DefaultDbContext>();
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<DefaultDbContext>();
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<DefaultDbContext>();
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<DefaultDbContext>();
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<DefaultDbContext>();
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("任务生成成功!");
}
}
}
/// <summary>
/// 读取一楼托盘库位是否空闲
/// </summary>
/// <returns></returns>
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<DefaultDbContext>();
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<DefaultDbContext>();
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<int>() { 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("库位已空!");
}
}
}
/// <summary>
/// 任务完成
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
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");
}
}
/// <summary>
/// 删除用户
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
dbContext.SysUser.Remove(user);
dbContext.SaveChanges();
HandyControl.Controls.MessageBox.Show("删除成功!");
GetMenu();
}
}
catch
{
}
}
/// <summary>
/// 搜索
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SelectUser_Click(object sender, RoutedEventArgs e)
{
GetUser();
}
private void GetUser()
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
UserData.ItemsSource = dbContext.SysUser.WhereIf(!string.IsNullOrEmpty(LoginName.Text), t => t.UserName.Contains(LoginName.Text)).ToList();
}
/// <summary>
/// 添加用户
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void AddUser_Click(object sender, RoutedEventArgs e)
{
}
private void GetMenu()
{
//using var scope = _host.Services.CreateScope();
//using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
//var sysMenus = dbContext.SysMenu.Where(t => t.MenuVisble == 1).ToList();
//var sysRoles = dbContext.SysRole.Where(t => t.UserId == UserId).ToList();
//List<long?> 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();
}
/// <summary>
/// 添加盘库任务
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
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<DefaultDbContext>();
BaseEquip baseEquip = dbContext.BaseEquip.Where(t => t.objid == 10).First();
if (!string.IsNullOrEmpty(baseEquip.endStationCode))
{
List<WcsTask> 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();
}
}
/// <summary>
/// 扫描入库enter
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<DefaultDbContext>();
//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<DefaultDbContext>();
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<DefaultDbContext>();
//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<DefaultDbContext>();
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<string> 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<DefaultDbContext>();
using var transaction = dbContext.Database.BeginTransaction();
try
{
List<WmsBaseLocation> 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<string> 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<DefaultDbContext>();
using var transaction = dbContext.Database.BeginTransaction();
try
{
List<WmsBaseLocation> 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();
}
}
}
/// <summary>
/// 取消预调度
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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<ReponseMessage>(executeResult);
if (executeReponse != null && executeReponse.code == "0")
{
MessageBox.Show("取消预调度成功!");
}
else
{
MessageBox.Show($"取消预调度失败!");
}
}
private void Refulsh_Click(object sender, RoutedEventArgs e)
{
DrawLocaitons();
}
private List<WmsBaseLocation> GetLocations()
{
try
{
var wareHouse = WareHouseId.SelectedItem.ToString();
var warehouseId = new List<long>();
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<DefaultDbContext>();
return dbContext.WmsBaseLocation.Where(t => warehouseId.Contains(t.warehouseId)).ToList();
}
catch
{
return new List<WmsBaseLocation>();
}
}
private void DrawLocaitons()
{
loadLocations(GetLocations());
}
private void loadLocations(List<WmsBaseLocation> wmsBaseLocations)
{
try
{
if (wmsBaseLocations == null || wmsBaseLocations.Count == 0)
{
return;
}
List<BaseEquip> baseEquips = new List<BaseEquip>();
if (wmsBaseLocations.First().warehouseFloor == 2)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
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<DefaultDbContext>();
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<long> 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<WmsBaseLocation> 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<DefaultDbContext>();
SelectOutRawForm selectOutRawForm = new SelectOutRawForm(this._host, "", 4);
selectOutRawForm.ShowDialog();
if (string.IsNullOrEmpty(SelectOutRawForm.StationCode))
{
return;
}
else
{
bool hasTask = dbContext.WcsTask.Where(t => t.nextPointId == 10).Any();
bool hasTaskManual = dbContext.WcsTaskManual.Where(t => t.nextPointId == 10).Any();
if (hasTask || hasTaskManual)
{
MessageBox.Show("已经有任务了");
return;
}
BaseEquip startStationEquip = dbContext.BaseEquip.First(t => t.objid == 21);
BaseEquip bearAgvEquip = dbContext.BaseEquip.First(t => t.objid == 10);
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.equipNo == SelectOutRawForm.StationCode);
WcsTask bearAgvTask = new()
{
objid = _jcSnowId.NextId(),
taskType = 32,
containerNo = null,
currPointId = startStationEquip.objid,
currPointNo = startStationEquip.equipNo,
nextPointId = bearAgvEquip.objid,
nextPointNo = bearAgvEquip.equipNo,
endPointId = endEquip.objid,
endPointNo = endEquip.equipNo,
taskStatus = 0,
createTime = DateTime.Now,
createBy = "WCS",
qty = 1,
useFlag = 1,
equipmentNo = startStationEquip.equipNo,
remark = "组装出库",
floorNo = 5,
fromFloorNo = 5,
};
dbContext.Add(bearAgvTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(bearAgvTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
}
}
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();
}
/// <summary>
/// 提升机报警信息查询
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void HoistWarnInfoButton_Click(object sender, RoutedEventArgs e)
{
HoistWarnInfoWindow window = new HoistWarnInfoWindow(_host);
window.ShowDialog();
}
/// <summary>
/// 提升机报警异常处理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void HoistWarnHandlerButton_Click(object sender, RoutedEventArgs e)
{
HoistWarnHandlerWindow window = new HoistWarnHandlerWindow(_host);
window.ShowDialog();
}
}
}