using DM_Weight.Models; using DM_Weight.msg; using DM_Weight.Port; using DM_Weight.util; using log4net; using Prism.Commands; using Prism.Events; using Prism.Mvvm; using Prism.Regions; using Prism.Services.Dialogs; using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Data; namespace DM_Weight.ViewModels { public class AdditionWindowViewModel : BindableBase, INavigationAware, IRegionMemberLifetime { public bool KeepAlive => false; private readonly ILog logger = LogManager.GetLogger(typeof(AdditionWindowViewModel)); private List channelStocks; public List ChannelStocks { get => channelStocks; set => SetProperty(ref channelStocks, value); } List selectedStock=new List(); private object _finishStatus = Visibility.Collapsed; public object FinishStatus { get => _finishStatus; set => SetProperty(ref _finishStatus, value); } IDialogService _dialogService; IEventAggregator _eventAggregator; public AdditionWindowViewModel(IDialogService dialogService, IEventAggregator eventAggregator) { _dialogService = dialogService; _eventAggregator = eventAggregator; } public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } public void OnNavigatedFrom(NavigationContext navigationContext) { _eventAggregator.GetEvent().Unsubscribe(SetIsSelected); } public void OnNavigatedTo(NavigationContext navigationContext) { _eventAggregator.GetEvent().Subscribe(SetIsSelected); RequestData(); } private void RequestData() { ChannelStocks = SqlSugarHelper.Db.Queryable() .Includes(cs => cs.ChannelLst) .Includes(cs => cs.DrugInfo) .Where(cs => cs.MachineId == (ConfigurationManager.AppSettings["machineId"] ?? "DM5") && cs.BaseQuantity > cs.Quantity) .OrderBy(cs => cs.Chnguid) .OrderBy(cs => cs.DrawerNo) .ToList(); ChannelStocks.ForEach(cs => cs.AddQuantity = cs.BaseQuantity - cs.Quantity); } //开药箱放入药品 public DelegateCommand OpenBoxCommand { get => new DelegateCommand(() => { selectedStock = ChannelStocks.FindAll(cs => cs.ChannelLst.IsSelected).ToList(); if (selectedStock != null && selectedStock.Count > 0) { for (int i = 0; i < selectedStock.Count; i++) { ModbusHelper.GetInstance().OpenBoxDoor(selectedStock[i].DrawerNo - 1); Thread.Sleep(100); } } else { AlertMsg alertMsg = new AlertMsg { Message = $"未选择药箱,请先选择药箱", Type = MsgType.ERROR, }; _eventAggregator.GetEvent().Publish(alertMsg); return; } FinishStatus = Visibility.Visible; }); } //完成按钮 public DelegateCommand AddFinish { get => new DelegateCommand(() => { //更新 交接柜 库存信息 if (selectedStock != null && selectedStock.Count > 0) { for (int j = 0; j < selectedStock.Count; j++) { // 更新数据 交接柜 库存信息 ChannelStock jiaojie_it = selectedStock[j]; SqlSugarHelper.Db.Updateable(new ChannelStock() { Quantity = jiaojie_it.BaseQuantity, //ManuNo = it.ManuNo, //EffDate = it.EffDate, Id = jiaojie_it.Id, }).UpdateColumns(jiaojie_it => new { jiaojie_it.Quantity }).ExecuteCommand(); } List jiaojie = selectedStock.GroupBy(cs => cs.DrawerNo).Select(cs => cs.FirstOrDefault()).ToList(); if (jiaojie != null && jiaojie.Count > 0) { for (int j = 0; j < jiaojie.Count; j++) { ChannelStock jiaojie_it = jiaojie[j]; //更新交接柜状态为 已取药未入库 SqlSugarHelper.Db.Updateable(new ChannelList() { State = 0, Id = jiaojie_it.ChannelLst.Id }).UpdateColumns(it => it.State).ExecuteCommand(); } } } }); } //刷新 public DelegateCommand QueryCommand { get => new DelegateCommand(() => RequestData()); } //设置选中药箱的复选框状态 private void SetIsSelected(ChannelStock channelStock) { if (channelStock != null) { if (channelStock.ChannelLst.State == 1) { channelStock.ChannelLst.IsSelected = !channelStock.ChannelLst.IsSelected; } else { return; } if (channelStock != null && ChannelStocks != null) { ChannelStocks = ChannelStocks.Select(x => { for (int i = 0; i < ChannelStocks.Count; i++) { if (ChannelStocks[i].DrawerNo == channelStock.DrawerNo) { ChannelStocks[i].ChannelLst = channelStock.ChannelLst; } } return x; }).ToList(); } ICollectionView vw = CollectionViewSource.GetDefaultView(ChannelStocks); vw.GroupDescriptions.Add(new PropertyGroupDescription("ChannelLst")); } } } }