379 lines
15 KiB
C#
379 lines
15 KiB
C#
using DM_Weight.Models;
|
|
using DM_Weight.msg;
|
|
using DM_Weight.Port;
|
|
using DM_Weight.util;
|
|
using MaterialDesignThemes.Wpf;
|
|
using Prism.Commands;
|
|
using Prism.Events;
|
|
using Prism.Mvvm;
|
|
using Prism.Regions;
|
|
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Configuration;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Media;
|
|
|
|
namespace DM_Weight.ViewModels
|
|
{
|
|
public class SettingBoxWindowViewModel : BindableBase, INavigationAware, IRegionMemberLifetime
|
|
{
|
|
private SolidColorBrush _colorBrush;
|
|
|
|
public SolidColorBrush SnackbarBackground
|
|
{
|
|
get => _colorBrush;
|
|
set => SetProperty(ref _colorBrush, value);
|
|
}
|
|
private ISnackbarMessageQueue _snackbarMessageQueue = new SnackbarMessageQueue(TimeSpan.FromSeconds(3));
|
|
public ISnackbarMessageQueue SnackbarMessageQueue
|
|
{
|
|
get => _snackbarMessageQueue;
|
|
set => SetProperty(ref _snackbarMessageQueue, value);
|
|
}
|
|
private int _drawerNo = 0;
|
|
|
|
public int DrawerNo
|
|
{
|
|
get => _drawerNo;
|
|
set => SetProperty(ref _drawerNo, value);
|
|
}
|
|
|
|
private bool _isEnable = true;
|
|
public bool IsEnable { get => _isEnable; set => SetProperty(ref _isEnable, value); }
|
|
private int _status = 0;
|
|
public int Status { get => _status; set { SetProperty(ref _status, value); } }
|
|
|
|
//选择用户 控件的Visibility值
|
|
private object _userStatus = Visibility.Collapsed;
|
|
public object UserStatus
|
|
{
|
|
get => _userStatus;
|
|
set => SetProperty(ref _userStatus, value);
|
|
}
|
|
public static List<BoxType> StaticBoxType = new()
|
|
{
|
|
new BoxType() { TypeValue = 1, TypeName = "公共手术间" },
|
|
new BoxType() { TypeValue = 0, TypeName = "归属药师" }
|
|
};
|
|
|
|
//药箱类型
|
|
private List<BoxType> _boxTypes = StaticBoxType;
|
|
public List<BoxType> BoxTypeList
|
|
{
|
|
get => _boxTypes;
|
|
set => SetProperty(ref _boxTypes, value);
|
|
}
|
|
|
|
|
|
private BoxType _boxTypeSelectedItem = StaticBoxType[0];
|
|
public BoxType BoxTypeSelectedItem
|
|
{
|
|
get => _boxTypeSelectedItem;
|
|
set
|
|
{
|
|
if (value != null && value.TypeValue == 1)
|
|
{
|
|
//药箱为公共药箱,把药师信息隐藏
|
|
UserStatus = Visibility.Collapsed;
|
|
}
|
|
else
|
|
{
|
|
|
|
//药箱为药师药箱
|
|
UserStatus = Visibility.Visible;
|
|
}
|
|
SetProperty(ref _boxTypeSelectedItem, value);
|
|
}
|
|
}
|
|
|
|
//static List<BindUserList> StaticUserList = SqlSugarHelper.Db.Queryable<UserList>().Where(us => us.MachineId == "DM3").Select(us => new BindUserList() { UserId =Convert.ToInt32(us.UserBarcode), UserName = us.Nickname }).ToList();
|
|
//药师
|
|
private List<BindUserList> _userLists;// = StaticUserList;
|
|
public List<BindUserList> UserLists
|
|
{
|
|
get => _userLists;
|
|
set => SetProperty(ref _userLists, value);
|
|
}
|
|
|
|
private BindUserList _userListSelectedItem;// = _userLists[0];
|
|
public BindUserList UserListSelectedItem { get => _userListSelectedItem; set => SetProperty(ref _userListSelectedItem, value); }
|
|
|
|
private PortUtil _portUtil;
|
|
IEventAggregator _eventAggregator;
|
|
SocketHelper _socketHelper;
|
|
public SettingBoxWindowViewModel(PortUtil portUtil, IEventAggregator eventAggregator, SocketHelper socketHelper)
|
|
{
|
|
|
|
_portUtil = portUtil;
|
|
_eventAggregator = eventAggregator;
|
|
BindUserList();
|
|
_socketHelper = socketHelper;
|
|
}
|
|
private void BindUserList()
|
|
{
|
|
if (_userLists == null)
|
|
{
|
|
_userLists = SqlSugarHelper.Db.Queryable<UserList>().Where(us => us.MachineId == (ConfigurationManager.AppSettings["machineId"] ?? "DM5")).Select(us => new BindUserList() { UserId = us.UserBarcode, UserName = us.Nickname }).ToList();
|
|
_userListSelectedItem = _userLists[0];
|
|
}
|
|
}
|
|
public bool KeepAlive => false;
|
|
|
|
public bool IsNavigationTarget(NavigationContext navigationContext)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public void OnNavigatedFrom(NavigationContext navigationContext)
|
|
{
|
|
|
|
// 取消消息订阅
|
|
//_eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
|
|
}
|
|
private void BindBoxTypeList()
|
|
{
|
|
BoxTypeList.Clear();
|
|
BoxTypeList = new List<BoxType>() { new BoxType() { TypeValue = 0, TypeName = "归属药师" }, new BoxType() { TypeValue = 1, TypeName = "公共手术间" } };
|
|
}
|
|
public void OnNavigatedTo(NavigationContext navigationContext)
|
|
{
|
|
//_eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
|
|
}
|
|
//点击药箱
|
|
public DelegateCommand<string> UpdateDrawerNo
|
|
{
|
|
get => new DelegateCommand<string>((DrawerNo) =>
|
|
{
|
|
UserListSelectedItem = null;
|
|
this.DrawerNo = Convert.ToInt32(DrawerNo);
|
|
ChannelList cnl = SqlSugarHelper.Db.Queryable<ChannelList>().Where(cl => cl.MachineId == "DM5" && cl.DrawerNo.ToString() == DrawerNo+1).First();
|
|
if (cnl != null && cnl.DrawerType != null)
|
|
{
|
|
BoxType currentBoxType = StaticBoxType.Where(sbt => sbt.TypeValue == cnl.DrawerType).FirstOrDefault();
|
|
if (currentBoxType != null)
|
|
{
|
|
BoxTypeSelectedItem = currentBoxType;
|
|
if (BoxTypeSelectedItem.TypeValue == 0)
|
|
{
|
|
//药箱归属药师,把药师信息显示出来
|
|
UserStatus = Visibility.Visible;
|
|
if (!string.IsNullOrEmpty(cnl.BelongUser))
|
|
{
|
|
|
|
UserListSelectedItem = _userLists.Where(sul => sul.UserId!=null&&sul.UserId.ToString() == cnl.BelongUser).FirstOrDefault();
|
|
}
|
|
if (UserListSelectedItem == null)
|
|
{
|
|
if (UserLists.Where(us => us.UserName == "请选择药师").Count() <= 0)
|
|
{
|
|
BindUserList nullBind = new BindUserList();
|
|
//nullBind.UserId = null;
|
|
nullBind.UserName = "请选择药师";
|
|
_userLists.Add(nullBind);
|
|
|
|
}
|
|
UserListSelectedItem = UserLists.Where(us => us.UserName == "请选择药师").FirstOrDefault();
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
//药箱为公共药箱,把药师信息隐藏
|
|
UserStatus = Visibility.Collapsed;
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
);
|
|
}
|
|
//打开药箱
|
|
public DelegateCommand OpenBox
|
|
{
|
|
get => new DelegateCommand(() =>
|
|
{
|
|
if (DrawerNo > 0)
|
|
{
|
|
if (_socketHelper.OpenStatus)
|
|
{
|
|
_socketHelper.speechSynthesizer.SpeakAsyncCancelAll();
|
|
_socketHelper.speechSynthesizer.Resume();
|
|
_socketHelper.SpeakAsync("请关闭手术间后再打开");
|
|
return;
|
|
}
|
|
|
|
//if (ModbusHelper.BoxOperate)
|
|
//{
|
|
// Task.Factory.StartNew(() => { ModbusHelper.SpeakAsync("请关闭药箱后再打开"); });
|
|
// return;
|
|
//}
|
|
IsEnable = false;
|
|
Status = 1;
|
|
//_portUtil.SpeakAsync("正在打开药箱");
|
|
//_portUtil.DrawerNo = DrawerNo;
|
|
//_portUtil.OpenBox();
|
|
_portUtil.SpeakAsync($"正在打开{DrawerNo}号手术间");//记录开药箱日志
|
|
SqlSugarHelper.Db.Insertable(new MachineRecord()
|
|
{
|
|
MachineId = "DM5",
|
|
DrawerNo = DrawerNo,
|
|
Operator = HomeWindowViewModel.Operator?.Id,
|
|
OperationTime = DateTime.Now,
|
|
Type = 55,
|
|
InvoiceId = $"打开{DrawerNo}号手术间",
|
|
}).ExecuteCommand();
|
|
//bool bFlag = ModbusHelper.GetInstance().OpenBoxDoor(DrawerNo - 1);
|
|
_socketHelper.SendMessage(new MyBaseMessage() { lockNo = (short)(DrawerNo - 1) });
|
|
_socketHelper.OpenStatus = true;
|
|
int i = 10;
|
|
Thread.Sleep(200);
|
|
new PromiseUtil<int>().taskAsyncLoop(500, 0, async (options, next, stop) =>
|
|
{
|
|
i--;
|
|
if (_socketHelper.OpenStatus)
|
|
{
|
|
|
|
//bool[] boolsl = ModbusHelper.GetInstance().GetAllBoxState();
|
|
_socketHelper.SendMessage(new MyBaseMessage() { lockNo = 0x33, functionCode = 4, delay = 2 });
|
|
|
|
//ModbusHelper.SpeakAsync($"i为{i};状态为:{_socketHelper.OpenStatus}");
|
|
//bool state = Array.TrueForAll(boolsl, b => b == false);
|
|
if (_socketHelper.OpenStatus)
|
|
{
|
|
//if (i == 0)
|
|
//{
|
|
// ModbusHelper.SpeakAsync("请及时关闭药箱");
|
|
// i = 10;
|
|
//}
|
|
next();
|
|
}
|
|
else
|
|
{
|
|
stop();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
stop();
|
|
}
|
|
});
|
|
// if (bFlag)
|
|
{
|
|
IsEnable = true;
|
|
Status = 0;
|
|
}
|
|
//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("药箱已打开,请及时关闭");
|
|
// }
|
|
// }
|
|
//});
|
|
}
|
|
});
|
|
}
|
|
|
|
public DelegateCommand SaveSetting
|
|
{
|
|
get => new DelegateCommand(() =>
|
|
{
|
|
if (DrawerNo > 0)
|
|
{
|
|
ChannelList channelList = SqlSugarHelper.Db.Queryable<ChannelList>().Where(cs => cs.DrawerNo == (DrawerNo+1) && cs.MachineId == "DM5").First();
|
|
if (BoxTypeSelectedItem != null)
|
|
{
|
|
int iUpdate = 0;
|
|
if (BoxTypeSelectedItem.TypeValue == 0 && UserListSelectedItem != null)
|
|
{
|
|
//药箱 归属药师
|
|
|
|
iUpdate = SqlSugarHelper.Db.Updateable(new ChannelList() { BelongUser = UserListSelectedItem.UserId.ToString(), DrawerType = BoxTypeSelectedItem.TypeValue, Id = channelList.Id }).UpdateColumns(cl => new { cl.BelongUser, cl.DrawerType }).ExecuteCommand();
|
|
}
|
|
else
|
|
{
|
|
//药箱属于公共药箱
|
|
iUpdate = SqlSugarHelper.Db.Updateable(new ChannelList() { DrawerType = BoxTypeSelectedItem.TypeValue, Id = channelList.Id }).UpdateColumns(cl => new { cl.DrawerType }).ExecuteCommand();
|
|
|
|
}
|
|
if (iUpdate > 0)
|
|
{
|
|
//提示请选择药箱
|
|
AlertMsg alertMsg = new AlertMsg
|
|
{
|
|
Message = $"保存完成",
|
|
Type = MsgType.INFO
|
|
};
|
|
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
|
|
|
|
}
|
|
else
|
|
{
|
|
|
|
//提示请选择药箱
|
|
AlertMsg alertMsg = new AlertMsg
|
|
{
|
|
Message = $"保存失败",
|
|
Type = MsgType.ERROR
|
|
};
|
|
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//提示请选择药箱
|
|
AlertMsg alertMsg = new AlertMsg
|
|
{
|
|
Message = $"未选择手术间,请先选择手术间",
|
|
Type = MsgType.ERROR
|
|
};
|
|
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
|
|
public DelegateCommand Query
|
|
{
|
|
get => new DelegateCommand(() =>
|
|
{
|
|
BindUserList();
|
|
});
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 药箱类型
|
|
/// </summary>
|
|
public class BoxType
|
|
{
|
|
public int TypeValue { get; set; }
|
|
public string TypeName { get; set; }
|
|
}
|
|
|
|
public class BindUserList
|
|
{
|
|
public string UserId { get; set; }
|
|
public string UserName { get; set; }
|
|
}
|
|
}
|