using GalaSoft.MvvmLight; using GalaSoft.MvvmLight.Command; using Microsoft.Extensions.DependencyInjection; using SlnMesnac.Business; using SlnMesnac.Config; using SlnMesnac.Model.domain; using SlnMesnac.Model.dto; using SlnMesnac.Model.enums; using SlnMesnac.Plc; using SlnMesnac.Repository.service; using SlnMesnac.WPF.MessageTips; using SqlSugar; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Documents; #region << 版 本 注 释 >> /*-------------------------------------------------------------------- * 版权所有 (c) 2024 WenJY 保留所有权利。 * CLR版本:4.0.30319.42000 * 机器名称:LAPTOP-E0N2L34V * 命名空间:SlnMesnac.WPF.ViewModel * 唯一标识:7b8b1dd3-c235-4b39-9df0-2c086246b206 * * 创建者:WenJY * 电子邮箱:wenjy@mesnac.com * 创建时间:2024-04-10 10:31:47 * 版本:V1.0.0 * 描述: * *-------------------------------------------------------------------- * 修改人: * 时间: * 修改说明: * * 版本:V1.0.0 *--------------------------------------------------------------------*/ #endregion << 版 本 注 释 >> namespace SlnMesnac.WPF.ViewModel { public class ManualDeliveryViewModel : ViewModelBase { private readonly IWmsRawPreferredOutService? wmsRawPreferredOutService; private readonly ISqlSugarClient? sqlSugarClient; private readonly DebugConfig debugConfig = DebugConfig.Instance; public ManualDeliveryViewModel() { wmsRawPreferredOutService = App.ServiceProvider.GetService(); sqlSugarClient = App.ServiceProvider.GetService(); QueryStringCommand = new RelayCommand(Query); Init(); // ConfirmCommand = new RelayCommand(Confirm); DeleteCommand = new RelayCommand(Delete); ChangeModeCommand = new RelayCommand(ChangeMode); } private void Init() { WmsRawPreferredOutDataGrid.Clear(); List list = wmsRawPreferredOutService.Query(); if (list != null && list.Count > 0) { foreach (var item in list) { WmsRawPreferredOutDataGrid.Add(item); } } } #region 参数定义 /// /// 计划列表DataGrid /// private ObservableCollection wmsRawPreferredOutDataGrid = new ObservableCollection(); public ObservableCollection WmsRawPreferredOutDataGrid { get { return wmsRawPreferredOutDataGrid; } set { wmsRawPreferredOutDataGrid = value; RaisePropertyChanged(() => WmsRawPreferredOutDataGrid); } } /// /// 选中计划列表信息 /// private MesProductPlanDto selectedCells; public MesProductPlanDto SelectedCells { get { return selectedCells; } set { selectedCells = value; RaisePropertyChanged(() => SelectedCells); } } #endregion #region 事件定义 public RelayCommand QueryStringCommand { get; set; } /// /// 投料模式切换 /// public RelayCommand ChangeModeCommand { get; set; } /// /// 关闭事件 /// public RelayCommand DeleteCommand { get; set; } #endregion /// /// 查询库位能否投料,可以的话添加到投料队列 /// /// private void Query(string queryStr) { try { WmsBaseLocation? targetLocation = sqlSugarClient.AsTenant().GetConnection("mes").Queryable().Where(it => it.LocationCode == queryStr && it.WarehouseId == 311).First(); WmsRawStock? wmsRawStock = sqlSugarClient.AsTenant().GetConnection("mes").Queryable().Where(it => it.LocationCode == queryStr).First(); if (targetLocation != null) { if (string.IsNullOrEmpty(targetLocation.ContainerCode) || wmsRawStock == null) { Application.Current.Dispatcher.Invoke(() => { Msg.MsgShow("该库位没有库存,请重新输入", 2, 3); }); return; } if (targetLocation.LocationStatus != "1") { Application.Current.Dispatcher.Invoke(() => { Msg.MsgShow("该库位状态异常,禁止出", 2, 3); }); return; } if (targetLocation.LocDeep == 1) { int? row = targetLocation.LocRow % 2 == 0 ? targetLocation.LocRow - 1 : targetLocation.LocRow + 1; WmsBaseLocation? shallowLocation = sqlSugarClient.AsTenant().GetConnection("mes").Queryable().Where(it => it.WarehouseId == 311 && it.LocRow == row && it.LocColumn == targetLocation.LocColumn).First(); if (shallowLocation == null) { Msg.MsgShow($"未找到当前深库位对应的浅库位,请重新选择", 2, 3); return; } if(shallowLocation.LocationStatus != "1") { Msg.MsgShow($"当前库位对应的浅库位{shallowLocation.LocationCode}状态异常,禁止出库", 2, 3); return; } if (!string.IsNullOrEmpty(shallowLocation.ContainerCode)) { // 判断浅库位是否已经加到出库队列 WmsRawPreferredOut? shallowPreferredOut = wmsRawPreferredOutService.Query(x => x.LocationCode == shallowLocation.LocationCode).FirstOrDefault(); if(shallowPreferredOut == null) { Msg.MsgShow($"当前库位对应的浅库位{shallowLocation.LocationCode}有库存,请优先出对应的浅库位", 2, 3); return; } } } WmsRawPreferredOut? isHas = wmsRawPreferredOutService.Query(x => x.LocationCode == targetLocation.LocationCode).FirstOrDefault(); if (isHas != null) { Msg.MsgShow($"当前库位{targetLocation.LocationCode}已经存在出库队列,无需重复出", 2, 3); return; } WmsRawPreferredOut wmsRawPreferredOut = new WmsRawPreferredOut(); wmsRawPreferredOut.WarehouseId = wmsRawStock.WarehouseId; wmsRawPreferredOut.WarehouseFloor = targetLocation.WarehouseFloor; wmsRawPreferredOut.LocationCode = targetLocation.LocationCode; wmsRawPreferredOut.StockType = "1"; wmsRawPreferredOut.MaterialId = wmsRawStock.MaterialId; wmsRawPreferredOut.CreateBy = "PRD"; wmsRawPreferredOut.CreateDate = DateTime.Now; wmsRawPreferredOut.UpdateBy = "PRD"; wmsRawPreferredOut.UpdateDate = DateTime.Now; wmsRawPreferredOut.UseFlag = "1"; wmsRawPreferredOutService.Insert(wmsRawPreferredOut); Init(); Msg.MsgShow("保存成功", 0, 5); } else { Msg.MsgShow("输入的库位有误,请重新输入", 2, 5); return; } } catch (Exception ex) { Msg.MsgShow($"保存异常:{ex.Message}", 2, 5); } } ///// ///// 确认 ///// ///// //private void Confirm(object parameter) //{ // try // { // if (selectedCells != null) // { // if (_prodMgmtBusiness.ApplyDeliveryHandle(selectedCells.MaterialId.ToString())) // { // _prodMgmtBusiness.RefreshMessage("手动叫料成功"); // } // else // { // _prodMgmtBusiness.RefreshMessage("手动叫料失败"); // } // } // }catch (Exception ex) // { // _prodMgmtBusiness.RefreshMessage($"手动叫料处理异常:{ex.Message}"); // } // var window = parameter as Window; // if (window != null) // { // window.Close(); // } //} /// /// 取消 /// private void Delete(object parameter) { string locationCode = parameter as string; if (!string.IsNullOrEmpty(locationCode)) { WmsBaseLocation? targetLocation = sqlSugarClient.AsTenant().GetConnection("mes").Queryable().Where(it => it.LocationCode == locationCode && it.WarehouseId == 311).First(); // 删除浅库位,需要保证也同步删除队列里的深库位 if (targetLocation != null && targetLocation.LocDeep==2) { // 判断深库位是否在出库队列,如果在删除 int? row = targetLocation.LocRow % 2 == 0 ? targetLocation.LocRow - 1 : targetLocation.LocRow + 1; WmsBaseLocation? deepLocation = sqlSugarClient.AsTenant().GetConnection("mes").Queryable().Where(it => it.WarehouseId == 311 && it.LocRow == row && it.LocColumn == targetLocation.LocColumn).First(); if (deepLocation != null) { var deepHas = wmsRawPreferredOutService.Query(x => x.LocationCode == deepLocation.LocationCode).FirstOrDefault(); if(deepHas != null) { Msg.MsgShow($"当前库位对应的深库位{deepLocation.LocationCode}在出库队列,请先删除", 2, 3); return; } } } var item = wmsRawPreferredOutService.Query(x => x.LocationCode == locationCode).FirstOrDefault(); bool isSuccess = wmsRawPreferredOutService.DeleteById(item.RawPreferredOutId); Init(); } } private void ChangeMode(object parameter) { debugConfig.ProductMode = debugConfig.ProductMode=="1"?"2":"1"; } } }