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.Configuration; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace DM_Weight.ViewModels { public class OrderTakeNewDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime { private readonly ILog logger = LogManager.GetLogger(typeof(OrderTakeDialogViewModel)); public string Title => "处方取药"; public event Action RequestClose; private static readonly DateTime Jan1st1970 = new DateTime (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); IDialogService _dialogService; public OrderTakeNewDialogViewModel(IDialogService DialogService) { _dialogService = DialogService; } private int _status = 0; public int Status { get => _status; set => SetProperty(ref _status, value); } private OrderInfo? _orderInfo; public OrderInfo? OrderInfo { get => _orderInfo; set => SetProperty(ref _orderInfo, value); } private List orderDetails { get; set; } private List _channelStocks; public List ChannelStocks { get => _channelStocks; set => SetProperty(ref _channelStocks, value); } private IEnumerable> enumerable; private IEnumerator> enumerator; public bool CanCloseDialog() { return Status == 0; } public void OnDialogClosed() { } public void OnDialogOpened(IDialogParameters parameters) { OrderInfo o = parameters.GetValue("orderInfo"); OrderInfo = o; RequestData(); } public async void RequestData() { orderDetails = SqlSugarHelper.Db.Queryable() .Includes(od => od.DrugInfo) .InnerJoin(SqlSugarHelper.Db.Queryable().Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3")).GroupBy(cs => cs.DrugId), (od, t) => od.DrugId == t.DrugId) .Where(od => od.OrderNo == OrderInfo.OrderNo) .ToList(); List channelStocks = new List(); List msg = new List(); for (int i = 0; i < orderDetails.Count; i++) { OrderDetail orderDetail = orderDetails[i]; List HasQChannels = SqlSugarHelper.Db.Queryable() .Includes(cs => cs.DrugInfo) .Where(cs => cs.Quantity > 0) .Where(cs => cs.DrawerType == 1) .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3")) .WhereIF(!string.IsNullOrEmpty(orderDetail.SetEffDate), cs => cs.EffDate.Equals(orderDetail.SetEffDate)) .WhereIF(!string.IsNullOrEmpty(orderDetail.SetManuNo), cs => cs.ManuNo.Equals(orderDetail.SetManuNo)) .Where(cs => cs.DrugId == orderDetail.DrugId) .OrderBy(cs => cs.EffDate) .OrderBy(cs => cs.DrawerNo) .ToList(); int total = HasQChannels.Sum(it => it.Quantity); int TakeQ = orderDetail.Quantity; // 说明数量足够 if (total >= TakeQ) { for (int j = 0; TakeQ > 0; j++) { ChannelStock stock = HasQChannels[j]; if (TakeQ > stock.Quantity) { stock.TakeQuantity = stock.Quantity; channelStocks.Add(stock); TakeQ -= stock.Quantity; } else { stock.TakeQuantity = TakeQ; channelStocks.Add(stock); TakeQ = 0; } } } else { msg.Add($"药品【{orderDetail.DrugInfo.DrugName}】库存不足,应取【{TakeQ}】库存【{total}】"); } } if (msg.Count > 0) { RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel)); //MessageBox.Show(string.Join("\n", msg)); DialogParameters dialogParameters = new DialogParameters(); dialogParameters.Add("msgInfo", msg); DialogServiceExtensions.ShowDialogHost(_dialogService, "ShowMessageDialog", dialogParameters, "RootDialog"); } else { channelStocks.Sort((a, b) => { if ((a.DrawerNo - b.DrawerNo) == 0) { return a.ColNo - b.ColNo; } return a.DrawerNo - b.DrawerNo; }); ChannelStocks = channelStocks; } } private bool _isFinishClick = false; public long CurrentTimeMillis() { return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds; } public DelegateCommand BtnCloseCommand { get => new DelegateCommand(() => { if (Status != 0) { Status = 0; } //DialogParameters parameters = new DialogParameters(); //parameters.Add("",); // 关闭当前窗口 RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel)); }); } public bool KeepAlive => false; } }