265 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			265 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C#
		
	
	
	
using Common.Logging;
 | 
						||
using DM_Weight.Models;
 | 
						||
using DM_Weight.msg;
 | 
						||
using DM_Weight.Port;
 | 
						||
using DM_Weight.util;
 | 
						||
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.Drawing.Printing;
 | 
						||
using System.Linq;
 | 
						||
using System.Text;
 | 
						||
using System.Threading;
 | 
						||
using System.Threading.Tasks;
 | 
						||
 | 
						||
namespace DM_Weight.ViewModels
 | 
						||
{
 | 
						||
    public class ExchangeWindowViewModel : BindableBase, INavigationAware, IRegionMemberLifetime
 | 
						||
    {
 | 
						||
        public bool KeepAlive => false;
 | 
						||
 | 
						||
        private readonly ILog logger = LogManager.GetLogger(typeof(CheckOrderNewWindowViewModel));
 | 
						||
 | 
						||
        private List<ChannelStock> _channelStocks=new List<ChannelStock>();
 | 
						||
        public List<ChannelStock> _ChannelStocks
 | 
						||
        {
 | 
						||
            get => _channelStocks;
 | 
						||
            set=>SetProperty(ref _channelStocks, value);
 | 
						||
        }
 | 
						||
 | 
						||
        private ChannelStock _selectedChannelStock=new ChannelStock();
 | 
						||
        public ChannelStock _ChannelStock
 | 
						||
        {
 | 
						||
            get=>_selectedChannelStock;
 | 
						||
            set=>SetProperty(ref _selectedChannelStock, value);
 | 
						||
        }
 | 
						||
        //所选药箱号
 | 
						||
        private int _drawerNo = -1;
 | 
						||
 | 
						||
        public int DrawerNo
 | 
						||
        {
 | 
						||
            get => _drawerNo;
 | 
						||
            set => SetProperty(ref _drawerNo, value);
 | 
						||
        }
 | 
						||
 | 
						||
        IDialogService _dialogService;
 | 
						||
        SocketHelper _socketHelper; 
 | 
						||
        IEventAggregator _eventAggregator;
 | 
						||
        public ExchangeWindowViewModel(IEventAggregator eventAggregator, IDialogService DialogService, SocketHelper socketHelper)
 | 
						||
        {
 | 
						||
            _dialogService = DialogService;
 | 
						||
            _socketHelper = socketHelper;
 | 
						||
            _eventAggregator = eventAggregator;
 | 
						||
        }
 | 
						||
        public DelegateCommand<string> UpdateDrawerNo
 | 
						||
        {
 | 
						||
            get => new DelegateCommand<string>(OpenBoxAction);
 | 
						||
        }
 | 
						||
        public async void OpenBoxAction(string strDrawerNo)
 | 
						||
        {
 | 
						||
            if (_socketHelper.OpenStatus)
 | 
						||
            {
 | 
						||
                _socketHelper.speechSynthesizer.SpeakAsyncCancelAll();
 | 
						||
                _socketHelper.speechSynthesizer.Resume();
 | 
						||
                _socketHelper.SpeakAsync("请关闭手术间后再打开");
 | 
						||
                return;
 | 
						||
            }
 | 
						||
            DrawerNo = Convert.ToInt32(strDrawerNo);
 | 
						||
            MachineRecord machineRecord = new MachineRecord();
 | 
						||
            machineRecord.MachineId = "DM5";
 | 
						||
            machineRecord.DrawerNo = DrawerNo+1;
 | 
						||
            machineRecord.Operator = HomeWindowViewModel.Operator?.Id;
 | 
						||
            machineRecord.OperationTime = DateTime.Now;
 | 
						||
            machineRecord.Type = 55;
 | 
						||
            machineRecord.InvoiceId = $"交换药品,打开{DrawerNo+1}号手术间";
 | 
						||
 | 
						||
 | 
						||
            if (DrawerNo+1 > 0)
 | 
						||
            {
 | 
						||
                RequestData();
 | 
						||
                _socketHelper.speechSynthesizer.SpeakAsyncCancelAll();
 | 
						||
                _socketHelper.speechSynthesizer.Resume();
 | 
						||
                _socketHelper.SpeakAsync($"正在打开{DrawerNo+1}号手术间");
 | 
						||
                logger.Info($"正在打开{DrawerNo+1}号手术间");
 | 
						||
                //记录开药箱日志
 | 
						||
                SqlSugarHelper.Db.Insertable(machineRecord).ExecuteCommand();
 | 
						||
                try
 | 
						||
                {
 | 
						||
                    _socketHelper.SendMessage(new MyBaseMessage() { lockNo = (short)(DrawerNo) });
 | 
						||
                    _socketHelper.dateTime = DateTime.Now;
 | 
						||
                }
 | 
						||
                catch (Exception ex)
 | 
						||
                {
 | 
						||
                    AlertMsg alertMsg = new AlertMsg
 | 
						||
                    {
 | 
						||
                        Message = $"网口连接异常,正在重试{ex.Message}",
 | 
						||
                        Type = MsgType.ERROR,
 | 
						||
                    };
 | 
						||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
						||
                    logger.Info($"网口连接异常,正在重试{ex.Message}");
 | 
						||
                    return;
 | 
						||
                }
 | 
						||
                _socketHelper.OpenStatus = true;
 | 
						||
                //记录药箱打开时间
 | 
						||
                ChannelList channelList = SqlSugarHelper.Db.Queryable<ChannelList>().Where(cl => cl.MachineId == "DM5" && cl.DrawerNo == (DrawerNo+1)).First();
 | 
						||
                if (channelList != null && (channelList.EffDate is null || Convert.ToDateTime(channelList.EffDate).ToString("yyyy-MM-dd") != DateTime.Now.ToString("yyyy-MM-dd")))
 | 
						||
                {
 | 
						||
 | 
						||
                    channelList.EffDate = DateTime.Now.ToString();
 | 
						||
                    SqlSugarHelper.Db.Updateable(channelList).UpdateColumns(it => new { it.EffDate }).ExecuteCommand();
 | 
						||
                }
 | 
						||
                Thread.Sleep(200);
 | 
						||
                int iException = 0;
 | 
						||
                await new PromiseUtil<int>().taskAsyncLoop(500, 0, async (options, next, stop) =>
 | 
						||
                {
 | 
						||
                    try
 | 
						||
                    {
 | 
						||
                        if (_socketHelper.OpenStatus)
 | 
						||
                        {
 | 
						||
                            _socketHelper.SendMessage(new MyBaseMessage() { lockNo = 0x33, functionCode = 4, delay = 2 });
 | 
						||
 | 
						||
                            if (_socketHelper.OpenStatus)
 | 
						||
                            {
 | 
						||
                                next();
 | 
						||
                            }
 | 
						||
                            else
 | 
						||
                            {
 | 
						||
                                _socketHelper.IsMultiThread = false;
 | 
						||
                                _socketHelper.dateTime = DateTime.Now;
 | 
						||
                                stop();
 | 
						||
                            }
 | 
						||
                        }
 | 
						||
                        else
 | 
						||
                        {
 | 
						||
                            _socketHelper.IsMultiThread = false;
 | 
						||
                            _socketHelper.dateTime = DateTime.Now;
 | 
						||
                            stop();
 | 
						||
                        }
 | 
						||
                        iException = 0;
 | 
						||
                    }
 | 
						||
                    catch (Exception ex)
 | 
						||
                    {
 | 
						||
                        iException++;
 | 
						||
                        if (iException >= 3)
 | 
						||
                        {
 | 
						||
                            _socketHelper.OpenStatus = false;
 | 
						||
                        }
 | 
						||
                        AlertMsg alertMsg = new AlertMsg
 | 
						||
                        {
 | 
						||
                            Message = $"网口连接异常,正在重试{ex.Message}",
 | 
						||
                            Type = MsgType.ERROR,
 | 
						||
                        };
 | 
						||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
						||
                        logger.Info($"网口连接异常,正在重试{ex.Message}");
 | 
						||
                        next();
 | 
						||
                    }
 | 
						||
                });
 | 
						||
            }
 | 
						||
        }
 | 
						||
 | 
						||
        private void RequestData()
 | 
						||
        {
 | 
						||
            List<ChannelStock> queryData = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
						||
               .Includes(cs => cs.DrugInfo)
 | 
						||
               .Where(cs => cs.DrawerNo == (DrawerNo + 1))
 | 
						||
               .Where(cs => cs.DrugId != null)
 | 
						||
               .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM5"))
 | 
						||
               .OrderBy(cs => cs.DrugId)
 | 
						||
               .ToList();
 | 
						||
            _ChannelStocks = queryData.Select(it => { it.CheckQuantity = it.Quantity; return it; }).ToList();
 | 
						||
        }
 | 
						||
        public bool IsNavigationTarget(NavigationContext navigationContext)
 | 
						||
        {
 | 
						||
            return true;
 | 
						||
        }
 | 
						||
 | 
						||
        public void OnNavigatedFrom(NavigationContext navigationContext)
 | 
						||
        {
 | 
						||
        }
 | 
						||
 | 
						||
        public void OnNavigatedTo(NavigationContext navigationContext)
 | 
						||
        {
 | 
						||
 | 
						||
        }
 | 
						||
 | 
						||
        public DelegateCommand ExchangeCommand
 | 
						||
        {
 | 
						||
            get =>new DelegateCommand(Exchange);
 | 
						||
        }
 | 
						||
        //替换
 | 
						||
        private async void Exchange()
 | 
						||
        {
 | 
						||
            if (_ChannelStock == null)
 | 
						||
            {
 | 
						||
                logger.Error("请选择要交换的药品");
 | 
						||
                return;
 | 
						||
            }
 | 
						||
            if (_ChannelStock.DrugInfo == null)
 | 
						||
            {
 | 
						||
                logger.Error("请选<E8AFB7><E98089>要交换的药品");
 | 
						||
                return;
 | 
						||
            }
 | 
						||
            // 此处延时1毫秒,等待页面渲染
 | 
						||
            await Task.Delay(TimeSpan.FromMilliseconds(1));
 | 
						||
            //选中药箱号下的所有药品id
 | 
						||
            DialogParameters dialogParameters = new DialogParameters();
 | 
						||
            dialogParameters.Add("csStock", _ChannelStock);
 | 
						||
            DialogServiceExtensions.ShowDialogHost(_dialogService, "ExchangeDialog", dialogParameters, DoDialogResult, "RootDialog");
 | 
						||
        }
 | 
						||
        //移出
 | 
						||
        public DelegateCommand RemoveCommand
 | 
						||
        {
 | 
						||
            get => new DelegateCommand(Remove);
 | 
						||
        }
 | 
						||
        private async void Remove()
 | 
						||
        {
 | 
						||
            if (_ChannelStock != null)
 | 
						||
            {
 | 
						||
                // 此处延时1毫秒,等待页面渲染
 | 
						||
                await Task.Delay(TimeSpan.FromMilliseconds(1));
 | 
						||
                //选中药箱号下的所有药品id
 | 
						||
                DialogParameters dialogParameters = new DialogParameters();
 | 
						||
                dialogParameters.Add("csStock", _ChannelStock);
 | 
						||
                DialogServiceExtensions.ShowDialogHost(_dialogService, "RemoveDialog", dialogParameters, DoDialogResult, "RootDialog");
 | 
						||
            }
 | 
						||
            else
 | 
						||
            {
 | 
						||
                AlertMsg alertMsg = new AlertMsg
 | 
						||
                {
 | 
						||
                    Message = "请选择要移出的药品!",
 | 
						||
                    Type = MsgType.ERROR,
 | 
						||
                };
 | 
						||
                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
						||
                return;
 | 
						||
            }
 | 
						||
        }
 | 
						||
        private void DoDialogResult(IDialogResult dialogResult)
 | 
						||
        {
 | 
						||
            RequestData();
 | 
						||
        }
 | 
						||
 | 
						||
        private DelegateCommand _rowSelected;
 | 
						||
 | 
						||
        public DelegateCommand RowSelected => _rowSelected ??= new DelegateCommand(OpenOrderDialog);
 | 
						||
        public async void OpenOrderDialog()
 | 
						||
        {
 | 
						||
            //if (_ChannelStock != null)
 | 
						||
            //{
 | 
						||
            //    // 此处延时1毫秒,等待页面渲染
 | 
						||
            //    await Task.Delay(TimeSpan.FromMilliseconds(1));
 | 
						||
            //    //选中药箱号下的所有药品id
 | 
						||
            //    DialogParameters dialogParameters = new DialogParameters();
 | 
						||
            //    dialogParameters.Add("_ChannelStock", _ChannelList.channelStocks);
 | 
						||
            //    DialogServiceExtensions.ShowDialogHost(_dialogService, "AddToJiaoJieDialog", dialogParameters, DoDialogResult, "RootDialog");
 | 
						||
 | 
						||
            //}
 | 
						||
 | 
						||
        }
 | 
						||
    }
 | 
						||
}
 |