186 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			186 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C#
		
	
	
	
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<IDialogResult> 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<OrderDetail> orderDetails { get; set; }
 | 
						|
 | 
						|
        private List<ChannelStock> _channelStocks;
 | 
						|
 | 
						|
        public List<ChannelStock> ChannelStocks
 | 
						|
        {
 | 
						|
            get => _channelStocks;
 | 
						|
            set => SetProperty(ref _channelStocks, value);
 | 
						|
        }
 | 
						|
 | 
						|
        private IEnumerable<IGrouping<int, ChannelStock>> enumerable;
 | 
						|
        private IEnumerator<IGrouping<int, ChannelStock>> enumerator;
 | 
						|
 | 
						|
 | 
						|
        public bool CanCloseDialog()
 | 
						|
        {
 | 
						|
            return Status == 0;
 | 
						|
        }
 | 
						|
 | 
						|
        public void OnDialogClosed()
 | 
						|
        {
 | 
						|
        }
 | 
						|
 | 
						|
        public void OnDialogOpened(IDialogParameters parameters)
 | 
						|
        {
 | 
						|
            OrderInfo o = parameters.GetValue<OrderInfo>("orderInfo");
 | 
						|
            OrderInfo = o;
 | 
						|
            RequestData();
 | 
						|
        }
 | 
						|
        public async void RequestData()
 | 
						|
        {
 | 
						|
            orderDetails = SqlSugarHelper.Db.Queryable<OrderDetail>()
 | 
						|
                .Includes<DrugInfo>(od => od.DrugInfo)
 | 
						|
                .InnerJoin(SqlSugarHelper.Db.Queryable<ChannelStock>().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<ChannelStock> channelStocks = new List<ChannelStock>();
 | 
						|
            List<string> msg = new List<string>();
 | 
						|
            for (int i = 0; i < orderDetails.Count; i++)
 | 
						|
            {
 | 
						|
                OrderDetail orderDetail = orderDetails[i];
 | 
						|
 | 
						|
                List<ChannelStock> HasQChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
						|
                    .Includes<DrugInfo>(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;
 | 
						|
    }
 | 
						|
}
 |