288 lines
12 KiB
C#
288 lines
12 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.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<ChannelStock> channelStocks;
|
|
public List<ChannelStock> ChannelStocks
|
|
{
|
|
get => channelStocks;
|
|
set => SetProperty(ref channelStocks, value);
|
|
}
|
|
List<ChannelStock> selectedStock = new List<ChannelStock>();
|
|
private object _finishStatus = Visibility.Collapsed;
|
|
public object FinishStatus
|
|
{
|
|
get => _finishStatus;
|
|
set => SetProperty(ref _finishStatus, value);
|
|
}
|
|
|
|
IDialogService _dialogService;
|
|
IEventAggregator _eventAggregator;
|
|
//private PortUtil _portUtil;
|
|
SocketHelper _socketHelper;
|
|
|
|
public AdditionWindowViewModel(IEventAggregator eventAggregator,SocketHelper socketHelper)
|
|
{
|
|
//_dialogService = dialogService;
|
|
_eventAggregator = eventAggregator;
|
|
//_portUtil = portUtil;
|
|
_socketHelper= socketHelper;
|
|
}
|
|
public bool IsNavigationTarget(NavigationContext navigationContext)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public void OnNavigatedFrom(NavigationContext navigationContext)
|
|
{
|
|
_eventAggregator.GetEvent<IsSelectedEvent>().Unsubscribe(SetIsSelected);
|
|
}
|
|
|
|
public void OnNavigatedTo(NavigationContext navigationContext)
|
|
{
|
|
_eventAggregator.GetEvent<IsSelectedEvent>().Subscribe(SetIsSelected);
|
|
RequestData();
|
|
}
|
|
private void RequestData()
|
|
{
|
|
ChannelStocks = SqlSugarHelper.Db.Queryable<ChannelStock>()
|
|
.Includes<ChannelList>(cs => cs.ChannelLst)
|
|
.Includes<DrugInfo>(cs => cs.DrugInfo)
|
|
.Where(cs => cs.MachineId == (ConfigurationManager.AppSettings["machineId"] ?? "DM5") && cs.AddToJJNum > 0)
|
|
|
|
.OrderBy(cs => cs.DrawerNo)
|
|
.OrderBy(cs => cs.DrugId)
|
|
.ToList();
|
|
//ChannelStocks= ChannelStocks.GroupBy(it=>new {it.DrawerNo,it.DrugId})
|
|
// .Select(it=>
|
|
// {
|
|
// var ret = it.First();
|
|
// ret.Quantity = it.Sum(itx => itx.Quantity);
|
|
// return ret;
|
|
// }).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)
|
|
{
|
|
selectedStock.ForEach(cs => cs.ChannelLst.State = 2);
|
|
|
|
int drawerNo = -1;
|
|
for (int i = 0; i < selectedStock.Count; i++)
|
|
{
|
|
if (!(drawerNo == selectedStock[i].DrawerNo))
|
|
{
|
|
drawerNo = selectedStock[i].DrawerNo;
|
|
|
|
// 保存数据 入库记录
|
|
SqlSugarHelper.Db.Insertable(new MachineRecord()
|
|
{
|
|
MachineId = "DM5",
|
|
DrawerNo = drawerNo,
|
|
Operator = HomeWindowViewModel.Operator?.Id,
|
|
OperationTime = DateTime.Now,
|
|
Type = 55,
|
|
InvoiceId = "手术间补药",
|
|
}).ExecuteCommand();
|
|
|
|
_socketHelper.speechSynthesizer.SpeakAsyncCancelAll();
|
|
_socketHelper.speechSynthesizer.Resume();
|
|
_socketHelper.SpeakAsync($"正在打开{selectedStock[i].DrawerNo}号手术间");
|
|
|
|
//ModbusHelper.GetInstance().OpenBoxDoor(selectedStock[i].DrawerNo - 1);
|
|
try
|
|
{
|
|
_socketHelper.SendMessage(new MyBaseMessage() { lockNo = (short)(selectedStock[i].DrawerNo - 1) });
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
AlertMsg alertMsg = new AlertMsg
|
|
{
|
|
Message = $"网口连接异常,正在重试{ex.Message}",
|
|
Type = MsgType.ERROR,
|
|
};
|
|
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
|
|
logger.Info($"网口连接异常,正在重试{ex.Message}");
|
|
return;
|
|
}
|
|
Thread.Sleep(100);
|
|
}
|
|
}
|
|
//Task.Factory.StartNew(async () =>
|
|
//{
|
|
// bool loop = true;
|
|
// while (loop)
|
|
// {
|
|
// await Task.Delay(1000);
|
|
// bool[] boolsl = ModbusHelper.GetInstance().GetAllBoxState();
|
|
// bool state = Array.TrueForAll(boolsl, b => b == false);
|
|
// if (state)
|
|
// {
|
|
// loop = false;
|
|
// ModbusHelper.BoxOperate = false;
|
|
// }
|
|
// else
|
|
// {
|
|
// ModbusHelper.BoxOperate = true;
|
|
// //ModbusHelper.SpeakAsync("药箱已打开,请及时关闭");
|
|
// }
|
|
// }
|
|
//});
|
|
}
|
|
else
|
|
{
|
|
AlertMsg alertMsg = new AlertMsg
|
|
{
|
|
Message = $"未选择手术间,请先选择手术间",
|
|
Type = MsgType.ERROR,
|
|
};
|
|
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
|
|
return;
|
|
}
|
|
FinishStatus = Visibility.Visible;
|
|
});
|
|
}
|
|
//完成按钮
|
|
public DelegateCommand AddFinish
|
|
{
|
|
get => new DelegateCommand(() =>
|
|
{
|
|
var f = SqlSugarHelper.Db.UseTran(() =>
|
|
{
|
|
//更新 交接柜 库存信息
|
|
if (selectedStock != null && selectedStock.Count > 0)
|
|
{
|
|
//for (int j = 0; j < selectedStock.Count; j++)
|
|
//{
|
|
|
|
// // 更新数据 交接柜 库存信息
|
|
// ChannelStock jiaojie_it = selectedStock[j];
|
|
// jiaojie_it.Quantity = jiaojie_it.AddToJJNum;
|
|
// jiaojie_it.NeedNum = 0;
|
|
// jiaojie_it.AddToJJNum = 0;
|
|
//SqlSugarHelper.Db.Updateable(new ChannelStock()
|
|
//{
|
|
// Quantity = jiaojie_it.AddToJJNum,
|
|
// ManuNo = jiaojie_it.ManuNo,
|
|
// //EffDate = it.EffDate,
|
|
// //Id = jiaojie_it.Id,
|
|
// DrugId=jiaojie_it.DrugId,
|
|
// DrawerNo=jiaojie_it.DrawerNo,
|
|
// MachineId=jiaojie_it.MachineId,
|
|
//}).UpdateColumns(jiaojie_it => new { jiaojie_it.Quantity }).WhereColumns(jiaojie_it=>new { jiaojie_it.DrugId, jiaojie_it.DrawerNo, jiaojie_it.MachineId }).ExecuteCommand();
|
|
//}
|
|
selectedStock.ForEach(cs =>
|
|
{
|
|
cs.Quantity = cs.Quantity+cs.AddToJJNum;
|
|
cs.NeedNum= 0;
|
|
cs.AddToJJNum = 0;
|
|
});
|
|
SqlSugarHelper.Db.Updateable(selectedStock).ExecuteCommand();
|
|
|
|
List<ChannelStock> 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];
|
|
ChannelList jiaojieList = new ChannelList();
|
|
jiaojieList.State = 0;
|
|
jiaojieList.Id = jiaojie_it.ChannelLst.Id;
|
|
//更新交接柜状态为0
|
|
var result = SqlSugarHelper.Db.Updateable(jiaojieList)
|
|
.UpdateColumns(it => new { it.State, it.Id }).ExecuteCommand();
|
|
}
|
|
}
|
|
}
|
|
});
|
|
if (f.Data)
|
|
{
|
|
RequestData();
|
|
AlertMsg alertMsg = new AlertMsg
|
|
{
|
|
Message = "操作完成",
|
|
Type = MsgType.SUCCESS,
|
|
};
|
|
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
|
|
}
|
|
if (!f.IsSuccess)
|
|
{
|
|
AlertMsg alertMsg = new AlertMsg
|
|
{
|
|
Message = "操作失败!",
|
|
Type = MsgType.ERROR,
|
|
};
|
|
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
|
|
}
|
|
});
|
|
}
|
|
|
|
//刷新
|
|
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"));
|
|
}
|
|
}
|
|
}
|
|
}
|